<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[انجمن وب سایت مشاوره در زمینه پروژه های برنامه نویسی و طراحی وب سایتهای تجاری - مقاله های آموزشی]]></title>
		<link>https://forum.a00b.com/</link>
		<description><![CDATA[انجمن وب سایت مشاوره در زمینه پروژه های برنامه نویسی و طراحی وب سایتهای تجاری - https://forum.a00b.com]]></description>
		<pubDate>Thu, 09 Jul 2026 19:42:21 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[سوالات مبتدی مصاحبه Blazor]]></title>
			<link>https://forum.a00b.com/showthread.php?tid=365</link>
			<pubDate>Fri, 22 Dec 2023 20:04:21 +0000</pubDate>
			<guid isPermaLink="false">https://forum.a00b.com/showthread.php?tid=365</guid>
			<description><![CDATA[<div style="text-align: left;"><span style="font-size: large;">Basics of Blazor:<br />
<span style="font-weight: bold;">What is Blazor?</span><br />
Blazor is a web framework by Microsoft that allows developers to build interactive web applications using C# and .NET instead of JavaScript.<br />
<br />
<span style="font-weight: bold;">Explain the hosting models of Blazor.</span><br />
Blazor supports two hosting models: Blazor WebAssembly (Wasm) and Blazor Server. WebAssembly runs in the browser, while Server runs on the server and uses SignalR for communication.<br />
<br />
<span style="font-weight: bold;">What is Razor syntax?</span><br />
Razor syntax is a mix of HTML and C# used in Blazor views to define dynamic content and execute C# code.<br />
<br />
<span style="font-weight: bold;">How does Blazor handle communication between client and server in Blazor Server?</span><br />
Blazor Server uses SignalR for real-time communication between the client and server.<br />
<br />
<span style="font-weight: bold;">Explain the purpose of @code block in a Blazor component.</span><br />
The @code block is used for defining the C# code associated with a Blazor component. It includes fields, properties, and methods.<br />
<br />
Components and Data Binding:<br />
<span style="font-weight: bold;">What is a Blazor component?</span><br />
A Blazor component is a self-contained unit that encapsulates both the UI and the logic for a specific part of a web application.<br />
<br />
<span style="font-weight: bold;">Explain the difference between a stateful and stateless component in Blazor.</span><br />
A stateful component maintains its state during the lifetime of the application, while a stateless component doesn't maintain any state and relies on parameters.<br />
<br />
<span style="font-weight: bold;">What is two-way data binding in Blazor?</span><br />
Two-way data binding allows automatic synchronization of data between the UI and the underlying data model.<br />
<br />
<span style="font-weight: bold;">How can you pass parameters to a Blazor component?</span><br />
Parameters can be passed to a Blazor component using attributes on the component tag.<br />
<br />
<span style="font-weight: bold;">Explain the purpose of the @inject directive in Blazor.</span><br />
The @inject directive is used to inject services or dependencies into a Blazor component.<br />
<br />
Routing and Navigation:<br />
<span style="font-weight: bold;">How do you enable routing in a Blazor application?</span><br />
Routing in Blazor is enabled by adding the @page directive to a component and configuring routes in the Startup.cs file.<br />
<br />
<span style="font-weight: bold;">What is the purpose of the &lt;RouteView&gt; component in Blazor?</span><br />
&lt;RouteView&gt; is used for rendering the component associated with the current route.<br />
<br />
<span style="font-weight: bold;">How can you navigate to a different page in Blazor?</span><br />
Navigation in Blazor is typically done using the NavigationManager service, which provides methods like NavigateTo.<br />
<br />
<span style="font-weight: bold;">Explain the concept of route parameters in Blazor.</span><br />
Route parameters allow passing values in the URL to a component. They are defined in the @page directive.<br />
<br />
<span style="font-weight: bold;">What is the role of the &lt;Router&gt; component in Blazor?</span><br />
The &lt;Router&gt; component is responsible for coordinating the navigation and rendering of components based on the current route.<br />
<br />
Forms and Validation:<br />
<span style="font-weight: bold;">How do you handle form submissions in Blazor?</span><br />
Form submissions in Blazor are handled by attaching a method to the onsubmit event of the form.<br />
<br />
<span style="font-weight: bold;">What is the purpose of the EditForm component in Blazor?</span><br />
The EditForm component simplifies form handling by providing built-in support for form validation and submission.<br />
<br />
<span style="font-weight: bold;">Explain the role of data annotations in form validation in Blazor.</span><br />
Data annotations are used to apply validation rules to model properties. They are checked automatically when the form is submitted.<br />
<br />
<span style="font-weight: bold;">How can you display validation error messages in a Blazor form?</span><br />
Error messages can be displayed using the &lt;ValidationMessage&gt; component, which is associated with a specific form field.<br />
<br />
<span style="font-weight: bold;">What is the purpose of the EditContext class in Blazor forms?</span><br />
The EditContext class is used to track the state of a form and manage validation.<br />
<br />
Dependency Injection and Services:<br />
<span style="font-weight: bold;">How is dependency injection implemented in Blazor?</span><br />
Dependency injection is implemented using the @inject directive or through constructor injection in components.<br />
<br />
<span style="font-weight: bold;">Explain the concept of scoped services in Blazor.</span><br />
Scoped services are created once per scope (usually per request) and are shared within that scope.<br />
<br />
<span style="font-weight: bold;">What is the difference between singleton and transient services in Blazor?</span><br />
Singleton services are created once and shared throughout the application, while transient services are created each time they are requested.<br />
<br />
<span style="font-weight: bold;">How can you register services in a Blazor application?</span><br />
Services are registered in the Startup.cs file using the ConfigureServices method.<br />
<br />
<span style="font-weight: bold;">What is the purpose of the @inject directive in Blazor?</span><br />
The @inject directive is used to inject services or dependencies directly into Blazor components.<br />
<br />
JavaScript Interoperability:<br />
<span style="font-weight: bold;">How can you invoke JavaScript functions from Blazor?</span><br />
JavaScript functions can be invoked from Blazor using the JSRuntime service.<br />
<br />
<span style="font-weight: bold;">What is the purpose of the IJSObjectReference interface in Blazor?</span><br />
IJSObjectReference is used to reference and interact with JavaScript objects in Blazor.<br />
<br />
<span style="font-weight: bold;">Explain the concept of JavaScript interop in Blazor.</span><br />
JavaScript interop allows communication between C# code in Blazor and JavaScript code in the browser.<br />
<br />
<span style="font-weight: bold;">How can you pass parameters from C# to JavaScript in Blazor?</span><br />
Parameters can be passed from C# to JavaScript using the InvokeAsync method of the JSRuntime service.<br />
<br />
<span style="font-weight: bold;">What is the role of the @ref directive in Blazor JavaScript interop?</span><br />
The @ref directive is used to create a reference to a component or DOM element, which can be passed to JavaScript.<br />
<br />
Lifecycle and Events:<br />
<span style="font-weight: bold;">Explain the lifecycle of a Blazor component.</span><br />
The lifecycle of a Blazor component includes initialization, rendering, updating, and disposal.<br />
<br />
<span style="font-weight: bold;">What is the purpose of the OnInitialized and OnInitializedAsync lifecycle methods?</span><br />
These methods are called when a component has been initialized but not yet rendered.<br />
<br />
<span style="font-weight: bold;">How do you handle events in Blazor components?</span><br />
Events in Blazor components can be handled using the @onclick, @onchange, and other event handlers.<br />
<br />
<span style="font-weight: bold;">What is the OnParametersSet lifecycle method used for?</span><br />
OnParametersSet is called when component parameters have been set, allowing you to perform actions based on parameter changes.<br />
<br />
<span style="font-weight: bold;">Explain the purpose of the OnAfterRender and OnAfterRenderAsync lifecycle methods.</span><br />
These methods are called after a component has been rendered in the browser.<br />
<br />
Authentication and Authorization:<br />
<span style="font-weight: bold;">How can you implement authentication in a Blazor application?</span><br />
Authentication in Blazor can be implemented using authentication services and providers, such as IdentityServer or Azure AD.<br />
<br />
<span style="font-weight: bold;">Explain the role of the AuthorizeView component in Blazor.</span><br />
AuthorizeView is used to conditionally render content based on the user's authorization status.<br />
<br />
<span style="font-weight: bold;">What is the purpose of the AuthenticationStateProvider in Blazor?</span><br />
AuthenticationStateProvider is responsible for providing information about the user's authentication status.<br />
<br />
<span style="font-weight: bold;">How can you protect a Blazor component to require authentication?</span><br />
Use the Authorize attribute on a component to specify that only authenticated users can access it.<br />
<br />
<span style="font-weight: bold;">Explain the concept of policies in Blazor authorization.</span><br />
Policies define sets of requirements that users must meet to access specific resources. They are used in conjunction with the AuthorizeView component.<br />
<br />
Error Handling:<br />
<span style="font-weight: bold;">How do you handle errors in a Blazor application?</span><br />
Errors can be handled using try-catch blocks in C# code, and global error handling can be implemented using the ErrorBoundary component.<br />
<br />
<span style="font-weight: bold;">Explain the purpose of the ErrorBoundary component in Blazor.</span><br />
ErrorBoundary is used to catch JavaScript and rendering errors within its child components and display a fallback UI.<br />
<br />
<span style="font-weight: bold;">What is the OnError event used for in Blazor?</span><br />
The OnError event is triggered when an unhandled exception occurs during rendering.<br />
<br />
<span style="font-weight: bold;">How can you log errors in a Blazor application?</span><br />
Errors can be logged using the built-in logging infrastructure in Blazor, which includes services like ILogger.<br />
<br />
<span style="font-weight: bold;">Explain the role of the IErrorBoundary interface in Blazor error handling.</span><br />
IErrorBoundary allows custom error handling logic to be implemented in Blazor components.<br />
<br />
Component Communication:<br />
<span style="font-weight: bold;">How can you achieve parent-to-child component communication in Blazor?</span><br />
Parent-to-child communication is typically done by passing parameters from the parent to the child component.<br />
<br />
<span style="font-weight: bold;">Explain the purpose of the EventCallback in Blazor.</span><br />
EventCallback is used to pass events from child to parent components in Blazor.<br />
<br />
<span style="font-weight: bold;">How can you achieve sibling component communication in Blazor?</span><br />
Sibling communication often involves using a common parent component to manage state and pass data between siblings.<br />
<br />
<span style="font-weight: bold;">What is the purpose of the CascadingValue component in Blazor?</span><br />
CascadingValue is used to pass a value down the component hierarchy without the need for explicit parameter passing.<br />
<br />
<span style="font-weight: bold;">Explain the concept of component references in Blazor.</span><br />
Component references are used to obtain references to other components, allowing for direct communication between components.<br />
<br />
Testing in Blazor:<br />
<span style="font-weight: bold;">How can you unit test a Blazor component?</span><br />
Blazor components can be unit tested using testing libraries such as MSTest, xUnit, or NUnit.<br />
<br />
<span style="font-weight: bold;">What is the purpose of the TestHost class in Blazor testing?</span><br />
TestHost is used to host a Blazor component within a test environment, facilitating unit testing.<br />
<br />
<span style="font-weight: bold;">Explain the role of the RenderComponent method in Blazor testing.</span><br />
RenderComponent is used to render a Blazor component within a test, allowing for interaction and assertion.<br />
<br />
<span style="font-weight: bold;">How can you mock services in a Blazor unit test?</span><br />
Services can be mocked using various mocking frameworks, such as Moq, to isolate components for testing.<br />
<br />
<span style="font-weight: bold;">What is the purpose of the TestRenderer class in Blazor testing?</span><br />
TestRenderer is used to interact with and retrieve information from rendered components during testing.<br />
<br />
Server-Side Blazor:<br />
<span style="font-weight: bold;">What are the advantages of using Server-Side Blazor?</span><br />
Server-Side Blazor provides real-time updates, reduced client-side resources, and better security by keeping code on the server.<br />
<br />
<span style="font-weight: bold;">How does Server-Side Blazor handle UI updates?</span><br />
UI updates in Server-Side Blazor are handled automatically by SignalR, which pushes changes from the server to the client.<br />
<br />
<span style="font-weight: bold;">Explain the role of the CircuitHandler in Server-Side Blazor.</span><br />
CircuitHandler is used to customize the handling of the circuit, including connection and disconnection events.<br />
<br />
<span style="font-weight: bold;">What is the purpose of the _Imports.razor file in Server-Side Blazor?</span><br />
The _Imports.razor file is used to define global using statements that apply to all components in a Server-Side Blazor application.<br />
<br />
<span style="font-weight: bold;">How can you optimize performance in Server-Side Blazor applications?</span><br />
Performance optimization in Server-Side Blazor involves minimizing unnecessary component updates, reducing data transfer between client and server, and implementing caching strategies.<br />
<br />
این سوالات یک پایه خوب برای مصاحبه‌های سطح آسان در زمینه Blazor فراهم می‌کنند.</span></div>]]></description>
			<content:encoded><![CDATA[<div style="text-align: left;"><span style="font-size: large;">Basics of Blazor:<br />
<span style="font-weight: bold;">What is Blazor?</span><br />
Blazor is a web framework by Microsoft that allows developers to build interactive web applications using C# and .NET instead of JavaScript.<br />
<br />
<span style="font-weight: bold;">Explain the hosting models of Blazor.</span><br />
Blazor supports two hosting models: Blazor WebAssembly (Wasm) and Blazor Server. WebAssembly runs in the browser, while Server runs on the server and uses SignalR for communication.<br />
<br />
<span style="font-weight: bold;">What is Razor syntax?</span><br />
Razor syntax is a mix of HTML and C# used in Blazor views to define dynamic content and execute C# code.<br />
<br />
<span style="font-weight: bold;">How does Blazor handle communication between client and server in Blazor Server?</span><br />
Blazor Server uses SignalR for real-time communication between the client and server.<br />
<br />
<span style="font-weight: bold;">Explain the purpose of @code block in a Blazor component.</span><br />
The @code block is used for defining the C# code associated with a Blazor component. It includes fields, properties, and methods.<br />
<br />
Components and Data Binding:<br />
<span style="font-weight: bold;">What is a Blazor component?</span><br />
A Blazor component is a self-contained unit that encapsulates both the UI and the logic for a specific part of a web application.<br />
<br />
<span style="font-weight: bold;">Explain the difference between a stateful and stateless component in Blazor.</span><br />
A stateful component maintains its state during the lifetime of the application, while a stateless component doesn't maintain any state and relies on parameters.<br />
<br />
<span style="font-weight: bold;">What is two-way data binding in Blazor?</span><br />
Two-way data binding allows automatic synchronization of data between the UI and the underlying data model.<br />
<br />
<span style="font-weight: bold;">How can you pass parameters to a Blazor component?</span><br />
Parameters can be passed to a Blazor component using attributes on the component tag.<br />
<br />
<span style="font-weight: bold;">Explain the purpose of the @inject directive in Blazor.</span><br />
The @inject directive is used to inject services or dependencies into a Blazor component.<br />
<br />
Routing and Navigation:<br />
<span style="font-weight: bold;">How do you enable routing in a Blazor application?</span><br />
Routing in Blazor is enabled by adding the @page directive to a component and configuring routes in the Startup.cs file.<br />
<br />
<span style="font-weight: bold;">What is the purpose of the &lt;RouteView&gt; component in Blazor?</span><br />
&lt;RouteView&gt; is used for rendering the component associated with the current route.<br />
<br />
<span style="font-weight: bold;">How can you navigate to a different page in Blazor?</span><br />
Navigation in Blazor is typically done using the NavigationManager service, which provides methods like NavigateTo.<br />
<br />
<span style="font-weight: bold;">Explain the concept of route parameters in Blazor.</span><br />
Route parameters allow passing values in the URL to a component. They are defined in the @page directive.<br />
<br />
<span style="font-weight: bold;">What is the role of the &lt;Router&gt; component in Blazor?</span><br />
The &lt;Router&gt; component is responsible for coordinating the navigation and rendering of components based on the current route.<br />
<br />
Forms and Validation:<br />
<span style="font-weight: bold;">How do you handle form submissions in Blazor?</span><br />
Form submissions in Blazor are handled by attaching a method to the onsubmit event of the form.<br />
<br />
<span style="font-weight: bold;">What is the purpose of the EditForm component in Blazor?</span><br />
The EditForm component simplifies form handling by providing built-in support for form validation and submission.<br />
<br />
<span style="font-weight: bold;">Explain the role of data annotations in form validation in Blazor.</span><br />
Data annotations are used to apply validation rules to model properties. They are checked automatically when the form is submitted.<br />
<br />
<span style="font-weight: bold;">How can you display validation error messages in a Blazor form?</span><br />
Error messages can be displayed using the &lt;ValidationMessage&gt; component, which is associated with a specific form field.<br />
<br />
<span style="font-weight: bold;">What is the purpose of the EditContext class in Blazor forms?</span><br />
The EditContext class is used to track the state of a form and manage validation.<br />
<br />
Dependency Injection and Services:<br />
<span style="font-weight: bold;">How is dependency injection implemented in Blazor?</span><br />
Dependency injection is implemented using the @inject directive or through constructor injection in components.<br />
<br />
<span style="font-weight: bold;">Explain the concept of scoped services in Blazor.</span><br />
Scoped services are created once per scope (usually per request) and are shared within that scope.<br />
<br />
<span style="font-weight: bold;">What is the difference between singleton and transient services in Blazor?</span><br />
Singleton services are created once and shared throughout the application, while transient services are created each time they are requested.<br />
<br />
<span style="font-weight: bold;">How can you register services in a Blazor application?</span><br />
Services are registered in the Startup.cs file using the ConfigureServices method.<br />
<br />
<span style="font-weight: bold;">What is the purpose of the @inject directive in Blazor?</span><br />
The @inject directive is used to inject services or dependencies directly into Blazor components.<br />
<br />
JavaScript Interoperability:<br />
<span style="font-weight: bold;">How can you invoke JavaScript functions from Blazor?</span><br />
JavaScript functions can be invoked from Blazor using the JSRuntime service.<br />
<br />
<span style="font-weight: bold;">What is the purpose of the IJSObjectReference interface in Blazor?</span><br />
IJSObjectReference is used to reference and interact with JavaScript objects in Blazor.<br />
<br />
<span style="font-weight: bold;">Explain the concept of JavaScript interop in Blazor.</span><br />
JavaScript interop allows communication between C# code in Blazor and JavaScript code in the browser.<br />
<br />
<span style="font-weight: bold;">How can you pass parameters from C# to JavaScript in Blazor?</span><br />
Parameters can be passed from C# to JavaScript using the InvokeAsync method of the JSRuntime service.<br />
<br />
<span style="font-weight: bold;">What is the role of the @ref directive in Blazor JavaScript interop?</span><br />
The @ref directive is used to create a reference to a component or DOM element, which can be passed to JavaScript.<br />
<br />
Lifecycle and Events:<br />
<span style="font-weight: bold;">Explain the lifecycle of a Blazor component.</span><br />
The lifecycle of a Blazor component includes initialization, rendering, updating, and disposal.<br />
<br />
<span style="font-weight: bold;">What is the purpose of the OnInitialized and OnInitializedAsync lifecycle methods?</span><br />
These methods are called when a component has been initialized but not yet rendered.<br />
<br />
<span style="font-weight: bold;">How do you handle events in Blazor components?</span><br />
Events in Blazor components can be handled using the @onclick, @onchange, and other event handlers.<br />
<br />
<span style="font-weight: bold;">What is the OnParametersSet lifecycle method used for?</span><br />
OnParametersSet is called when component parameters have been set, allowing you to perform actions based on parameter changes.<br />
<br />
<span style="font-weight: bold;">Explain the purpose of the OnAfterRender and OnAfterRenderAsync lifecycle methods.</span><br />
These methods are called after a component has been rendered in the browser.<br />
<br />
Authentication and Authorization:<br />
<span style="font-weight: bold;">How can you implement authentication in a Blazor application?</span><br />
Authentication in Blazor can be implemented using authentication services and providers, such as IdentityServer or Azure AD.<br />
<br />
<span style="font-weight: bold;">Explain the role of the AuthorizeView component in Blazor.</span><br />
AuthorizeView is used to conditionally render content based on the user's authorization status.<br />
<br />
<span style="font-weight: bold;">What is the purpose of the AuthenticationStateProvider in Blazor?</span><br />
AuthenticationStateProvider is responsible for providing information about the user's authentication status.<br />
<br />
<span style="font-weight: bold;">How can you protect a Blazor component to require authentication?</span><br />
Use the Authorize attribute on a component to specify that only authenticated users can access it.<br />
<br />
<span style="font-weight: bold;">Explain the concept of policies in Blazor authorization.</span><br />
Policies define sets of requirements that users must meet to access specific resources. They are used in conjunction with the AuthorizeView component.<br />
<br />
Error Handling:<br />
<span style="font-weight: bold;">How do you handle errors in a Blazor application?</span><br />
Errors can be handled using try-catch blocks in C# code, and global error handling can be implemented using the ErrorBoundary component.<br />
<br />
<span style="font-weight: bold;">Explain the purpose of the ErrorBoundary component in Blazor.</span><br />
ErrorBoundary is used to catch JavaScript and rendering errors within its child components and display a fallback UI.<br />
<br />
<span style="font-weight: bold;">What is the OnError event used for in Blazor?</span><br />
The OnError event is triggered when an unhandled exception occurs during rendering.<br />
<br />
<span style="font-weight: bold;">How can you log errors in a Blazor application?</span><br />
Errors can be logged using the built-in logging infrastructure in Blazor, which includes services like ILogger.<br />
<br />
<span style="font-weight: bold;">Explain the role of the IErrorBoundary interface in Blazor error handling.</span><br />
IErrorBoundary allows custom error handling logic to be implemented in Blazor components.<br />
<br />
Component Communication:<br />
<span style="font-weight: bold;">How can you achieve parent-to-child component communication in Blazor?</span><br />
Parent-to-child communication is typically done by passing parameters from the parent to the child component.<br />
<br />
<span style="font-weight: bold;">Explain the purpose of the EventCallback in Blazor.</span><br />
EventCallback is used to pass events from child to parent components in Blazor.<br />
<br />
<span style="font-weight: bold;">How can you achieve sibling component communication in Blazor?</span><br />
Sibling communication often involves using a common parent component to manage state and pass data between siblings.<br />
<br />
<span style="font-weight: bold;">What is the purpose of the CascadingValue component in Blazor?</span><br />
CascadingValue is used to pass a value down the component hierarchy without the need for explicit parameter passing.<br />
<br />
<span style="font-weight: bold;">Explain the concept of component references in Blazor.</span><br />
Component references are used to obtain references to other components, allowing for direct communication between components.<br />
<br />
Testing in Blazor:<br />
<span style="font-weight: bold;">How can you unit test a Blazor component?</span><br />
Blazor components can be unit tested using testing libraries such as MSTest, xUnit, or NUnit.<br />
<br />
<span style="font-weight: bold;">What is the purpose of the TestHost class in Blazor testing?</span><br />
TestHost is used to host a Blazor component within a test environment, facilitating unit testing.<br />
<br />
<span style="font-weight: bold;">Explain the role of the RenderComponent method in Blazor testing.</span><br />
RenderComponent is used to render a Blazor component within a test, allowing for interaction and assertion.<br />
<br />
<span style="font-weight: bold;">How can you mock services in a Blazor unit test?</span><br />
Services can be mocked using various mocking frameworks, such as Moq, to isolate components for testing.<br />
<br />
<span style="font-weight: bold;">What is the purpose of the TestRenderer class in Blazor testing?</span><br />
TestRenderer is used to interact with and retrieve information from rendered components during testing.<br />
<br />
Server-Side Blazor:<br />
<span style="font-weight: bold;">What are the advantages of using Server-Side Blazor?</span><br />
Server-Side Blazor provides real-time updates, reduced client-side resources, and better security by keeping code on the server.<br />
<br />
<span style="font-weight: bold;">How does Server-Side Blazor handle UI updates?</span><br />
UI updates in Server-Side Blazor are handled automatically by SignalR, which pushes changes from the server to the client.<br />
<br />
<span style="font-weight: bold;">Explain the role of the CircuitHandler in Server-Side Blazor.</span><br />
CircuitHandler is used to customize the handling of the circuit, including connection and disconnection events.<br />
<br />
<span style="font-weight: bold;">What is the purpose of the _Imports.razor file in Server-Side Blazor?</span><br />
The _Imports.razor file is used to define global using statements that apply to all components in a Server-Side Blazor application.<br />
<br />
<span style="font-weight: bold;">How can you optimize performance in Server-Side Blazor applications?</span><br />
Performance optimization in Server-Side Blazor involves minimizing unnecessary component updates, reducing data transfer between client and server, and implementing caching strategies.<br />
<br />
این سوالات یک پایه خوب برای مصاحبه‌های سطح آسان در زمینه Blazor فراهم می‌کنند.</span></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[آموزش برخی از دستورات SQL Server به همراه مثال ساده]]></title>
			<link>https://forum.a00b.com/showthread.php?tid=364</link>
			<pubDate>Fri, 10 Nov 2023 16:01:00 +0000</pubDate>
			<guid isPermaLink="false">https://forum.a00b.com/showthread.php?tid=364</guid>
			<description><![CDATA[لیست برخی از دستورات در پایگاه داده sql server به همراه نحوه استفاده از آنها:<br />
<br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>1. CREATE DATABASE: <br />
&nbsp;&nbsp; CREATE DATABASE MyDatabase;<br />
<br />
2. CREATE TABLE: <br />
&nbsp;&nbsp; CREATE TABLE Employees (<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EmployeeID INT PRIMARY KEY,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FirstName VARCHAR(50),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LastName VARCHAR(50),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DepartmentID INT<br />
&nbsp;&nbsp; );<br />
<br />
3. ALTER TABLE: <br />
&nbsp;&nbsp; ALTER TABLE Employees<br />
&nbsp;&nbsp; ADD Salary DECIMAL(10, 2);<br />
<br />
4. DROP TABLE: <br />
&nbsp;&nbsp; DROP TABLE Employees;<br />
<br />
5. INSERT INTO: <br />
&nbsp;&nbsp; INSERT INTO Employees (EmployeeID, FirstName, LastName, DepartmentID)<br />
&nbsp;&nbsp; VALUES (1, 'John', 'Doe', 101);<br />
<br />
6. UPDATE: <br />
&nbsp;&nbsp; UPDATE Employees<br />
&nbsp;&nbsp; SET Salary = 50000<br />
&nbsp;&nbsp; WHERE EmployeeID = 1;<br />
<br />
7. DELETE FROM: <br />
&nbsp;&nbsp; DELETE FROM Employees<br />
&nbsp;&nbsp; WHERE EmployeeID = 1;<br />
<br />
8. SELECT: <br />
&nbsp;&nbsp; SELECT * FROM Employees;<br />
<br />
9. DISTINCT: <br />
&nbsp;&nbsp; SELECT DISTINCT DepartmentID<br />
&nbsp;&nbsp; FROM Employees;<br />
<br />
10. WHERE: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT * FROM Employees<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHERE DepartmentID = 101;<br />
<br />
11. ORDER BY: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT * FROM Employees<br />
&nbsp;&nbsp;&nbsp;&nbsp;ORDER BY LastName;<br />
<br />
12. GROUP BY: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT DepartmentID, COUNT(*)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees<br />
&nbsp;&nbsp;&nbsp;&nbsp;GROUP BY DepartmentID;<br />
<br />
13. HAVING: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT DepartmentID, COUNT(*)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees<br />
&nbsp;&nbsp;&nbsp;&nbsp;GROUP BY DepartmentID<br />
&nbsp;&nbsp;&nbsp;&nbsp;HAVING COUNT(*) &gt; 5;<br />
<br />
14. INNER JOIN: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT e.FirstName, e.LastName, d.DepartmentName<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees e<br />
&nbsp;&nbsp;&nbsp;&nbsp;INNER JOIN Departments d ON e.DepartmentID = d.DepartmentID;<br />
<br />
15. LEFT JOIN: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT e.FirstName, e.LastName, d.DepartmentName<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees e<br />
&nbsp;&nbsp;&nbsp;&nbsp;LEFT JOIN Departments d ON e.DepartmentID = d.DepartmentID;<br />
<br />
16. RIGHT JOIN: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT e.FirstName, e.LastName, d.DepartmentName<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees e<br />
&nbsp;&nbsp;&nbsp;&nbsp;RIGHT JOIN Departments d ON e.DepartmentID = d.DepartmentID;<br />
<br />
17. FULL JOIN: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT e.FirstName, e.LastName, d.DepartmentName<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees e<br />
&nbsp;&nbsp;&nbsp;&nbsp;FULL JOIN Departments d ON e.DepartmentID = d.DepartmentID;<br />
<br />
18. UNION: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT FirstName, LastName<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees<br />
&nbsp;&nbsp;&nbsp;&nbsp;UNION<br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT ManagerFirstName, ManagerLastName<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Managers;<br />
<br />
19. UNION ALL: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT FirstName, LastName<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees<br />
&nbsp;&nbsp;&nbsp;&nbsp;UNION ALL<br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT ManagerFirstName, ManagerLastName<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Managers;<br />
<br />
20. EXISTS: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT *<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees e<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHERE EXISTS (SELECT * FROM Managers m WHERE e.EmployeeID = m.EmployeeID);<br />
<br />
21. NOT EXISTS: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT *<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees e<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHERE NOT EXISTS (SELECT * FROM Managers m WHERE e.EmployeeID = m.EmployeeID);<br />
<br />
22. IN: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT *<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHERE DepartmentID IN (101, 102);<br />
<br />
23. NOT IN: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT *<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHERE DepartmentID NOT IN (101, 102);<br />
<br />
24. BETWEEN: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT *<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Orders<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHERE OrderDate BETWEEN '2022-01-01' AND '2022-01-31';<br />
<br />
25. LIKE: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT *<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Products<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHERE ProductName LIKE 'App%';<br />
<br />
26. IS NULL: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT *<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Customers<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHERE Email IS NULL;<br />
<br />
27. IS NOT NULL: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT *<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Customers<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHERE Email IS NOT NULL;<br />
<br />
28. AVG(): <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT AVG(Salary)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees;<br />
<br />
29. SUM(): <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT SUM(Salary)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees;<br />
<br />
30. COUNT(): <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT COUNT(*)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees;<br />
<br />
31. MAX(): <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT MAX(Salary)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees;<br />
<br />
32. MIN(): <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT MIN(Salary)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees;<br />
<br />
33. GROUP_CONCAT(): <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT DepartmentID, GROUP_CONCAT(LastName)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees<br />
&nbsp;&nbsp;&nbsp;&nbsp;GROUP BY DepartmentID;<br />
<br />
34. CASE WHEN: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT FirstName,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CASE WHEN Salary &gt; 50000 THEN 'High'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHEN Salary &gt; 30000 THEN 'Medium'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ELSE 'Low'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END AS SalaryLevel<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees;<br />
<br />
35. DATEPART(): <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT DATEPART(YEAR, OrderDate) AS OrderYear,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATEPART(MONTH, OrderDate) AS OrderMonth,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; COUNT(*) AS TotalOrders<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Orders<br />
&nbsp;&nbsp;&nbsp;&nbsp;GROUP BY DATEPART(YEAR, OrderDate), DATEPART(MONTH, OrderDate);<br />
<br />
36. DATEDIFF(): <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT DATEDIFF(DAY, OrderDate, ShippedDate) AS DaysToShip<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Orders;<br />
<br />
37. DATEADD(): <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT DATEADD(MONTH, 3, HireDate) AS ProbationEndDate<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees;<br />
<br />
38. UPPER(): <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT UPPER(LastName)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees;<br />
<br />
39. LOWER(): <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT LOWER(LastName)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees;<br />
<br />
40. LEFT(): <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT LEFT(FirstName, 3)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees;<br />
<br />
41. RIGHT(): <br />
&nbsp;&nbsp; SELECT RIGHT(LastName, 3)<br />
&nbsp;&nbsp; FROM Employees;<br />
<br />
42. LEN(): <br />
&nbsp;&nbsp; SELECT LEN(FirstName) AS FirstNameLength<br />
&nbsp;&nbsp; FROM Employees;<br />
<br />
43. ROUND(): <br />
&nbsp;&nbsp; SELECT ROUND(Salary, 2) AS RoundedSalary<br />
&nbsp;&nbsp; FROM Employees;<br />
<br />
44. CAST(): <br />
&nbsp;&nbsp; SELECT CAST(Salary AS INT) AS RoundedSalary<br />
&nbsp;&nbsp; FROM Employees;<br />
<br />
45. CONVERT(): <br />
&nbsp;&nbsp; SELECT CONVERT(VARCHAR(10), HireDate, 101) AS FormattedHireDate<br />
&nbsp;&nbsp; FROM Employees;<br />
<br />
46. COALESCE(): <br />
&nbsp;&nbsp; SELECT COALESCE(ManagerFirstName, 'No Manager') AS ManagerName<br />
&nbsp;&nbsp; FROM Employees;<br />
<br />
47. NULLIF(): <br />
&nbsp;&nbsp; SELECT NULLIF(ManagerFirstName, '') AS ManagerName<br />
&nbsp;&nbsp; FROM Employees;<br />
<br />
48. TOP(): <br />
&nbsp;&nbsp; SELECT TOP 10 *<br />
&nbsp;&nbsp; FROM Products;<br />
<br />
49. ROW_NUMBER(): <br />
&nbsp;&nbsp; SELECT ROW_NUMBER() OVER (ORDER BY LastName) AS RowNumber,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FirstName,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LastName<br />
&nbsp;&nbsp; FROM Employees;<br />
<br />
50. RANK(): <br />
&nbsp;&nbsp; SELECT RANK() OVER (ORDER BY Salary DESC) AS Rank,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FirstName,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LastName,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Salary<br />
&nbsp;&nbsp; FROM Employees;<br />
<br />
51. DENSE_RANK(): <br />
&nbsp;&nbsp; SELECT DENSE_RANK() OVER (ORDER BY Salary DESC) AS DenseRank,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FirstName,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LastName,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Salary<br />
&nbsp;&nbsp; FROM Employees;<br />
<br />
52. NTILE(): <br />
&nbsp;&nbsp; SELECT NTILE(4) OVER (ORDER BY Salary DESC) AS Quartile,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FirstName,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LastName,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Salary<br />
&nbsp;&nbsp; FROM Employees;<br />
<br />
53. CTE (Common Table Expression): <br />
&nbsp;&nbsp; WITH EmployeeCTE AS (<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT EmployeeID, FirstName, LastName, Salary,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ROW_NUMBER() OVER (ORDER BY Salary DESC) AS RowNumber<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM Employees<br />
&nbsp;&nbsp; )<br />
&nbsp;&nbsp; SELECT EmployeeID, FirstName, LastName, Salary<br />
&nbsp;&nbsp; FROM EmployeeCTE<br />
&nbsp;&nbsp; WHERE RowNumber &lt;= 10;<br />
<br />
54. INDEXES: <br />
&nbsp;&nbsp; CREATE INDEX IX_DepartmentID ON Employees(DepartmentID);<br />
<br />
55. TRIGGERS: <br />
&nbsp;&nbsp; CREATE TRIGGER trgAfterInsertEmployee<br />
&nbsp;&nbsp; ON Employees<br />
&nbsp;&nbsp; AFTER INSERT<br />
&nbsp;&nbsp; AS<br />
&nbsp;&nbsp; BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- Trigger logic here<br />
&nbsp;&nbsp; END;<br />
<br />
56. STORED PROCEDURES: <br />
&nbsp;&nbsp; CREATE PROCEDURE spGetEmployeeByID @EmployeeID INT<br />
&nbsp;&nbsp; AS<br />
&nbsp;&nbsp; BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- Procedure logic here<br />
&nbsp;&nbsp; END;<br />
<br />
57. VIEWS: <br />
&nbsp;&nbsp; CREATE VIEW vwHighSalaryEmployees AS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT FirstName, LastName, Salary<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM Employees<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE Salary &gt; 50000;<br />
<br />
58. TRANSACTIONS: <br />
&nbsp;&nbsp; BEGIN TRANSACTION;<br />
&nbsp;&nbsp; -- SQL statements here<br />
<br />
59. JOINS with USING clause:<br />
&nbsp;&nbsp;&nbsp;&nbsp; SELECT e.FirstName, e.LastName, d.DepartmentName<br />
&nbsp;&nbsp;&nbsp;&nbsp; FROM Employees e<br />
&nbsp;&nbsp;&nbsp;&nbsp; JOIN Departments d USING (DepartmentID);<br />
<br />
60. GRANT PERMISSIONS:<br />
&nbsp;&nbsp;&nbsp;&nbsp; GRANT SELECT ON Employees TO user1;</code></div></div>
]]></description>
			<content:encoded><![CDATA[لیست برخی از دستورات در پایگاه داده sql server به همراه نحوه استفاده از آنها:<br />
<br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>1. CREATE DATABASE: <br />
&nbsp;&nbsp; CREATE DATABASE MyDatabase;<br />
<br />
2. CREATE TABLE: <br />
&nbsp;&nbsp; CREATE TABLE Employees (<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EmployeeID INT PRIMARY KEY,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FirstName VARCHAR(50),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LastName VARCHAR(50),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DepartmentID INT<br />
&nbsp;&nbsp; );<br />
<br />
3. ALTER TABLE: <br />
&nbsp;&nbsp; ALTER TABLE Employees<br />
&nbsp;&nbsp; ADD Salary DECIMAL(10, 2);<br />
<br />
4. DROP TABLE: <br />
&nbsp;&nbsp; DROP TABLE Employees;<br />
<br />
5. INSERT INTO: <br />
&nbsp;&nbsp; INSERT INTO Employees (EmployeeID, FirstName, LastName, DepartmentID)<br />
&nbsp;&nbsp; VALUES (1, 'John', 'Doe', 101);<br />
<br />
6. UPDATE: <br />
&nbsp;&nbsp; UPDATE Employees<br />
&nbsp;&nbsp; SET Salary = 50000<br />
&nbsp;&nbsp; WHERE EmployeeID = 1;<br />
<br />
7. DELETE FROM: <br />
&nbsp;&nbsp; DELETE FROM Employees<br />
&nbsp;&nbsp; WHERE EmployeeID = 1;<br />
<br />
8. SELECT: <br />
&nbsp;&nbsp; SELECT * FROM Employees;<br />
<br />
9. DISTINCT: <br />
&nbsp;&nbsp; SELECT DISTINCT DepartmentID<br />
&nbsp;&nbsp; FROM Employees;<br />
<br />
10. WHERE: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT * FROM Employees<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHERE DepartmentID = 101;<br />
<br />
11. ORDER BY: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT * FROM Employees<br />
&nbsp;&nbsp;&nbsp;&nbsp;ORDER BY LastName;<br />
<br />
12. GROUP BY: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT DepartmentID, COUNT(*)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees<br />
&nbsp;&nbsp;&nbsp;&nbsp;GROUP BY DepartmentID;<br />
<br />
13. HAVING: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT DepartmentID, COUNT(*)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees<br />
&nbsp;&nbsp;&nbsp;&nbsp;GROUP BY DepartmentID<br />
&nbsp;&nbsp;&nbsp;&nbsp;HAVING COUNT(*) &gt; 5;<br />
<br />
14. INNER JOIN: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT e.FirstName, e.LastName, d.DepartmentName<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees e<br />
&nbsp;&nbsp;&nbsp;&nbsp;INNER JOIN Departments d ON e.DepartmentID = d.DepartmentID;<br />
<br />
15. LEFT JOIN: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT e.FirstName, e.LastName, d.DepartmentName<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees e<br />
&nbsp;&nbsp;&nbsp;&nbsp;LEFT JOIN Departments d ON e.DepartmentID = d.DepartmentID;<br />
<br />
16. RIGHT JOIN: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT e.FirstName, e.LastName, d.DepartmentName<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees e<br />
&nbsp;&nbsp;&nbsp;&nbsp;RIGHT JOIN Departments d ON e.DepartmentID = d.DepartmentID;<br />
<br />
17. FULL JOIN: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT e.FirstName, e.LastName, d.DepartmentName<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees e<br />
&nbsp;&nbsp;&nbsp;&nbsp;FULL JOIN Departments d ON e.DepartmentID = d.DepartmentID;<br />
<br />
18. UNION: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT FirstName, LastName<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees<br />
&nbsp;&nbsp;&nbsp;&nbsp;UNION<br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT ManagerFirstName, ManagerLastName<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Managers;<br />
<br />
19. UNION ALL: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT FirstName, LastName<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees<br />
&nbsp;&nbsp;&nbsp;&nbsp;UNION ALL<br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT ManagerFirstName, ManagerLastName<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Managers;<br />
<br />
20. EXISTS: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT *<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees e<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHERE EXISTS (SELECT * FROM Managers m WHERE e.EmployeeID = m.EmployeeID);<br />
<br />
21. NOT EXISTS: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT *<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees e<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHERE NOT EXISTS (SELECT * FROM Managers m WHERE e.EmployeeID = m.EmployeeID);<br />
<br />
22. IN: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT *<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHERE DepartmentID IN (101, 102);<br />
<br />
23. NOT IN: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT *<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHERE DepartmentID NOT IN (101, 102);<br />
<br />
24. BETWEEN: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT *<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Orders<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHERE OrderDate BETWEEN '2022-01-01' AND '2022-01-31';<br />
<br />
25. LIKE: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT *<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Products<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHERE ProductName LIKE 'App%';<br />
<br />
26. IS NULL: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT *<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Customers<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHERE Email IS NULL;<br />
<br />
27. IS NOT NULL: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT *<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Customers<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHERE Email IS NOT NULL;<br />
<br />
28. AVG(): <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT AVG(Salary)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees;<br />
<br />
29. SUM(): <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT SUM(Salary)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees;<br />
<br />
30. COUNT(): <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT COUNT(*)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees;<br />
<br />
31. MAX(): <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT MAX(Salary)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees;<br />
<br />
32. MIN(): <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT MIN(Salary)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees;<br />
<br />
33. GROUP_CONCAT(): <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT DepartmentID, GROUP_CONCAT(LastName)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees<br />
&nbsp;&nbsp;&nbsp;&nbsp;GROUP BY DepartmentID;<br />
<br />
34. CASE WHEN: <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT FirstName,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CASE WHEN Salary &gt; 50000 THEN 'High'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHEN Salary &gt; 30000 THEN 'Medium'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ELSE 'Low'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END AS SalaryLevel<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees;<br />
<br />
35. DATEPART(): <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT DATEPART(YEAR, OrderDate) AS OrderYear,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATEPART(MONTH, OrderDate) AS OrderMonth,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; COUNT(*) AS TotalOrders<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Orders<br />
&nbsp;&nbsp;&nbsp;&nbsp;GROUP BY DATEPART(YEAR, OrderDate), DATEPART(MONTH, OrderDate);<br />
<br />
36. DATEDIFF(): <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT DATEDIFF(DAY, OrderDate, ShippedDate) AS DaysToShip<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Orders;<br />
<br />
37. DATEADD(): <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT DATEADD(MONTH, 3, HireDate) AS ProbationEndDate<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees;<br />
<br />
38. UPPER(): <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT UPPER(LastName)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees;<br />
<br />
39. LOWER(): <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT LOWER(LastName)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees;<br />
<br />
40. LEFT(): <br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT LEFT(FirstName, 3)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM Employees;<br />
<br />
41. RIGHT(): <br />
&nbsp;&nbsp; SELECT RIGHT(LastName, 3)<br />
&nbsp;&nbsp; FROM Employees;<br />
<br />
42. LEN(): <br />
&nbsp;&nbsp; SELECT LEN(FirstName) AS FirstNameLength<br />
&nbsp;&nbsp; FROM Employees;<br />
<br />
43. ROUND(): <br />
&nbsp;&nbsp; SELECT ROUND(Salary, 2) AS RoundedSalary<br />
&nbsp;&nbsp; FROM Employees;<br />
<br />
44. CAST(): <br />
&nbsp;&nbsp; SELECT CAST(Salary AS INT) AS RoundedSalary<br />
&nbsp;&nbsp; FROM Employees;<br />
<br />
45. CONVERT(): <br />
&nbsp;&nbsp; SELECT CONVERT(VARCHAR(10), HireDate, 101) AS FormattedHireDate<br />
&nbsp;&nbsp; FROM Employees;<br />
<br />
46. COALESCE(): <br />
&nbsp;&nbsp; SELECT COALESCE(ManagerFirstName, 'No Manager') AS ManagerName<br />
&nbsp;&nbsp; FROM Employees;<br />
<br />
47. NULLIF(): <br />
&nbsp;&nbsp; SELECT NULLIF(ManagerFirstName, '') AS ManagerName<br />
&nbsp;&nbsp; FROM Employees;<br />
<br />
48. TOP(): <br />
&nbsp;&nbsp; SELECT TOP 10 *<br />
&nbsp;&nbsp; FROM Products;<br />
<br />
49. ROW_NUMBER(): <br />
&nbsp;&nbsp; SELECT ROW_NUMBER() OVER (ORDER BY LastName) AS RowNumber,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FirstName,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LastName<br />
&nbsp;&nbsp; FROM Employees;<br />
<br />
50. RANK(): <br />
&nbsp;&nbsp; SELECT RANK() OVER (ORDER BY Salary DESC) AS Rank,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FirstName,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LastName,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Salary<br />
&nbsp;&nbsp; FROM Employees;<br />
<br />
51. DENSE_RANK(): <br />
&nbsp;&nbsp; SELECT DENSE_RANK() OVER (ORDER BY Salary DESC) AS DenseRank,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FirstName,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LastName,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Salary<br />
&nbsp;&nbsp; FROM Employees;<br />
<br />
52. NTILE(): <br />
&nbsp;&nbsp; SELECT NTILE(4) OVER (ORDER BY Salary DESC) AS Quartile,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FirstName,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LastName,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Salary<br />
&nbsp;&nbsp; FROM Employees;<br />
<br />
53. CTE (Common Table Expression): <br />
&nbsp;&nbsp; WITH EmployeeCTE AS (<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT EmployeeID, FirstName, LastName, Salary,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ROW_NUMBER() OVER (ORDER BY Salary DESC) AS RowNumber<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM Employees<br />
&nbsp;&nbsp; )<br />
&nbsp;&nbsp; SELECT EmployeeID, FirstName, LastName, Salary<br />
&nbsp;&nbsp; FROM EmployeeCTE<br />
&nbsp;&nbsp; WHERE RowNumber &lt;= 10;<br />
<br />
54. INDEXES: <br />
&nbsp;&nbsp; CREATE INDEX IX_DepartmentID ON Employees(DepartmentID);<br />
<br />
55. TRIGGERS: <br />
&nbsp;&nbsp; CREATE TRIGGER trgAfterInsertEmployee<br />
&nbsp;&nbsp; ON Employees<br />
&nbsp;&nbsp; AFTER INSERT<br />
&nbsp;&nbsp; AS<br />
&nbsp;&nbsp; BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- Trigger logic here<br />
&nbsp;&nbsp; END;<br />
<br />
56. STORED PROCEDURES: <br />
&nbsp;&nbsp; CREATE PROCEDURE spGetEmployeeByID @EmployeeID INT<br />
&nbsp;&nbsp; AS<br />
&nbsp;&nbsp; BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- Procedure logic here<br />
&nbsp;&nbsp; END;<br />
<br />
57. VIEWS: <br />
&nbsp;&nbsp; CREATE VIEW vwHighSalaryEmployees AS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT FirstName, LastName, Salary<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM Employees<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE Salary &gt; 50000;<br />
<br />
58. TRANSACTIONS: <br />
&nbsp;&nbsp; BEGIN TRANSACTION;<br />
&nbsp;&nbsp; -- SQL statements here<br />
<br />
59. JOINS with USING clause:<br />
&nbsp;&nbsp;&nbsp;&nbsp; SELECT e.FirstName, e.LastName, d.DepartmentName<br />
&nbsp;&nbsp;&nbsp;&nbsp; FROM Employees e<br />
&nbsp;&nbsp;&nbsp;&nbsp; JOIN Departments d USING (DepartmentID);<br />
<br />
60. GRANT PERMISSIONS:<br />
&nbsp;&nbsp;&nbsp;&nbsp; GRANT SELECT ON Employees TO user1;</code></div></div>
]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[ایجاد دیتابیس SQL Server کتابخانه با پروسیجر و ویو و فانکشن و تریگر]]></title>
			<link>https://forum.a00b.com/showthread.php?tid=363</link>
			<pubDate>Mon, 11 Sep 2023 00:39:07 +0000</pubDate>
			<guid isPermaLink="false">https://forum.a00b.com/showthread.php?tid=363</guid>
			<description><![CDATA[<span style="font-weight: bold;"><span style="font-size: medium;"><div style="text-align: justify;">Library Management System SQL Server Database with Tables, View, Stored Procedures, Trigger and function and some sample data</div></span></span><br />
<span style="font-size: large;"><div style="text-align: justify;">فرض کنید یک پایگاه داده برای مدیریت کتابخانه ایجاد می کنیم. در این پایگاه داده چهار جدول زیر وجود دارد:</div></span><br />
<div style="text-align: justify;"><span style="font-size: medium;"><br />
<span style="font-weight: bold;">Books (کتاب‌ها)</span><br />
BookID (شناسه کتاب): شناسه یکتای هر کتاب<br />
Title (عنوان): عنوان کتاب<br />
Author (نویسنده): نویسنده کتاب<br />
PublicationYear (سال انتشار): سال انتشار کتاب<br />
Genre (ژانر): ژانر یا دسته‌بندی کتاب<br />
<br />
<span style="font-weight: bold;">Authors (نویسندگان)</span><br />
AuthorID (شناسه نویسنده): شناسه یکتای هر نویسنده<br />
FirstName (نام): نام نویسنده<br />
LastName (نام خانوادگی): نام خانوادگی نویسنده<br />
BirthYear (سال تولد): سال تولد نویسنده<br />
<br />
<span style="font-weight: bold;">Customers (مشتریان)</span><br />
CustomerID (شناسه مشتری): شناسه یکتای هر مشتری<br />
FirstName (نام): نام مشتری<br />
LastName (نام خانوادگی): نام خانوادگی مشتری<br />
Email (ایمیل): آدرس ایمیل مشتری<br />
PhoneNumber (شماره تلفن): شماره تلفن مشتری<br />
<br />
<span style="font-weight: bold;">BorrowedBooks (کتاب‌های امانی)</span><br />
BorrowID (شناسه امانت): شناسه یکتای هر امانت کتاب به مشتری<br />
CustomerID (شناسه مشتری): شناسه مشتری که کتاب را امانت گرفته است<br />
BookID (شناسه کتاب): شناسه کتابی که به مشتری امانت داده شده است<br />
BorrowDate (تاریخ امانت): تاریخی که کتاب به مشتری امانت داده شده است<br />
ReturnDate (تاریخ بازگشت): تاریخی که کتاب از مشتری بازگشت داده شده است<br />
حالا می توانیم کد SQL Server برای ایجاد این جداول را بنویسیم. در اینجا از دستورات T-SQL استفاده می کنیم:</span></div>
<br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>-- Create Authors table<br />
CREATE TABLE Authors (<br />
&nbsp;&nbsp;&nbsp;&nbsp;AuthorID INT PRIMARY KEY,<br />
&nbsp;&nbsp;&nbsp;&nbsp;FirstName VARCHAR(50),<br />
&nbsp;&nbsp;&nbsp;&nbsp;LastName VARCHAR(50),<br />
&nbsp;&nbsp;&nbsp;&nbsp;BirthYear INT<br />
);<br />
<br />
-- Create Books table<br />
CREATE TABLE Books (<br />
&nbsp;&nbsp;&nbsp;&nbsp;BookID INT PRIMARY KEY,<br />
&nbsp;&nbsp;&nbsp;&nbsp;Title VARCHAR(100),<br />
&nbsp;&nbsp;&nbsp;&nbsp;AuthorID INT,<br />
&nbsp;&nbsp;&nbsp;&nbsp;PublicationYear INT,<br />
&nbsp;&nbsp;&nbsp;&nbsp;Genre VARCHAR(50),<br />
&nbsp;&nbsp;&nbsp;&nbsp;FOREIGN KEY (AuthorID) REFERENCES Authors(AuthorID)<br />
);<br />
<br />
-- Create Customers table<br />
CREATE TABLE Customers (<br />
&nbsp;&nbsp;&nbsp;&nbsp;CustomerID INT PRIMARY KEY,<br />
&nbsp;&nbsp;&nbsp;&nbsp;FirstName VARCHAR(50),<br />
&nbsp;&nbsp;&nbsp;&nbsp;LastName VARCHAR(50),<br />
&nbsp;&nbsp;&nbsp;&nbsp;Email VARCHAR(100),<br />
&nbsp;&nbsp;&nbsp;&nbsp;PhoneNumber VARCHAR(20)<br />
);<br />
<br />
-- Create BorrowedBooks table<br />
CREATE TABLE BorrowedBooks (<br />
&nbsp;&nbsp;&nbsp;&nbsp;BorrowID INT PRIMARY KEY,<br />
&nbsp;&nbsp;&nbsp;&nbsp;CustomerID INT,<br />
&nbsp;&nbsp;&nbsp;&nbsp;BookID INT,<br />
&nbsp;&nbsp;&nbsp;&nbsp;BorrowDate DATE,<br />
&nbsp;&nbsp;&nbsp;&nbsp;ReturnDate DATE,<br />
&nbsp;&nbsp;&nbsp;&nbsp;FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID),<br />
&nbsp;&nbsp;&nbsp;&nbsp;FOREIGN KEY (BookID) REFERENCES Books(BookID)<br />
);</code></div></div>
<span style="font-size: medium;"><div style="text-align: justify;">این کد SQL یک پایگاه داده با چهار جدول ایجاد می کند و ارتباطات بین آن‌ها را تعیین می‌کند. برای ایجاد این جداول در SQL Server، شما می توانید از نرم‌افزار SQL Server Management Studio یا هر ابزار مشابه دیگری استفاده کنید. می‌توانید رکوردهای نمونه برای جداول مختلف را ایجاد کنید. در اینجا چند رکورد نمونه برای هر جدول ارائه داده شده است:</div></span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>-- افزودن رکوردهای نمونه به Authors table<br />
INSERT INTO Authors (AuthorID, FirstName, LastName, BirthYear)<br />
VALUES<br />
&nbsp;&nbsp;&nbsp;&nbsp;(1, 'John', 'Doe', 1980),<br />
&nbsp;&nbsp;&nbsp;&nbsp;(2, 'Jane', 'Smith', 1975),<br />
&nbsp;&nbsp;&nbsp;&nbsp;(3, 'Michael', 'Johnson', 1990);<br />
<br />
-- افزودن رکوردهای نمونه به Books table<br />
INSERT INTO Books (BookID, Title, AuthorID, PublicationYear, Genre)<br />
VALUES<br />
&nbsp;&nbsp;&nbsp;&nbsp;(101, 'Sample Book 1', 1, 2010, 'Fiction'),<br />
&nbsp;&nbsp;&nbsp;&nbsp;(102, 'Sample Book 2', 2, 2015, 'Mystery'),<br />
&nbsp;&nbsp;&nbsp;&nbsp;(103, 'Sample Book 3', 3, 2020, 'Science Fiction');<br />
<br />
-- افزودن رکوردهای نمونه به Customers table<br />
INSERT INTO Customers (CustomerID, FirstName, LastName, Email, PhoneNumber)<br />
VALUES<br />
&nbsp;&nbsp;&nbsp;&nbsp;(1001, 'Alice', 'Johnson', 'alice@example.com', '123-456-7890'),<br />
&nbsp;&nbsp;&nbsp;&nbsp;(1002, 'Bob', 'Smith', 'bob@example.com', '987-654-3210'),<br />
&nbsp;&nbsp;&nbsp;&nbsp;(1003, 'Carol', 'Davis', 'carol@example.com', '111-222-3333');<br />
<br />
-- افزودن رکوردهای نمونه به BorrowedBooks table<br />
INSERT INTO BorrowedBooks (BorrowID, CustomerID, BookID, BorrowDate, ReturnDate)<br />
VALUES<br />
&nbsp;&nbsp;&nbsp;&nbsp;(10001, 1001, 101, '2023-09-01', '2023-09-15'),<br />
&nbsp;&nbsp;&nbsp;&nbsp;(10002, 1002, 102, '2023-09-05', '2023-09-20'),<br />
&nbsp;&nbsp;&nbsp;&nbsp;(10003, 1003, 103, '2023-09-10', '2023-09-25');</code></div></div>
<span style="font-size: large;"><div style="text-align: justify;">این کد SQL رکوردهای نمونه را به هر یک از جداول اضافه می‌کند. می‌توانید این کد را به کمک SQL Server Management Studio یا ابزار مدیریت دیگر اجرا کنید تا رکوردهای نمونه ایجاد شوند.<br />
بر اساس جدول های بالا چند کوئری نمونه برای ساخت جداول انجام دادیم. حالا چند کوئری برای انجام عملیات مختلف روی این جداول به شما ارائه می‌دهم:<br />
</div></span><br />
<span style="font-size: medium;">بازیابی همه کتاب‌ها به همراه نویسنده‌هایشان:</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>SELECT Books.Title, Authors.FirstName, Authors.LastName<br />
FROM Books<br />
INNER JOIN Authors ON Books.AuthorID = Authors.AuthorID;</code></div></div>
<span style="font-size: medium;">بازیابی تمام مشتریان و کتاب‌هایی که به اختیار آن‌ها قرار گرفته است:</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>SELECT Customers.FirstName, Customers.LastName, Books.Title<br />
FROM Customers<br />
INNER JOIN BorrowedBooks ON Customers.CustomerID = BorrowedBooks.CustomerID<br />
INNER JOIN Books ON BorrowedBooks.BookID = Books.BookID;</code></div></div>
<span style="font-size: medium;">بازیابی تعداد کتاب‌هایی که هر نویسنده نوشته است:</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>SELECT Authors.FirstName, Authors.LastName, COUNT(Books.BookID) AS TotalBooks<br />
FROM Authors<br />
LEFT JOIN Books ON Authors.AuthorID = Books.AuthorID<br />
GROUP BY Authors.FirstName, Authors.LastName;</code></div></div>
<span style="font-size: medium;">بازیابی تاریخ بازگشت کتاب‌ها بر اساس نام مشتری:</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>SELECT Customers.FirstName, Customers.LastName, Books.Title, BorrowedBooks.ReturnDate<br />
FROM Customers<br />
INNER JOIN BorrowedBooks ON Customers.CustomerID = BorrowedBooks.CustomerID<br />
INNER JOIN Books ON BorrowedBooks.BookID = Books.BookID<br />
ORDER BY Customers.FirstName, Customers.LastName;</code></div></div>
<span style="font-size: medium;"><div style="text-align: justify;">این کوئری‌ها فقط چند نمونه از کوئری‌های ممکن برای این جداول هستند. شما می‌توانید کوئری‌های مختلفی بر اساس نیاز خود ایجاد کنید تا اطلاعات مورد نظر را بازیابی کنید.</div></span><br />
<span style="font-size: medium;"><div style="text-align: justify;">البته در مورد محاسباتی، برای محاسبه مقادیر جدید از داده‌های موجود استفاده می‌شود. در این مثال‌ها، محاسبات را بر روی داده‌های جداول تعریف کرده و نتایج را به نمایش می‌گذاریم:<br />
</div></span><br />
<div style="text-align: justify;"><span style="font-size: medium;">محاسبه میانگین سال تولید کتب:</span></div>
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>SELECT AVG(PublicationYear) AS AveragePublicationYear<br />
FROM Books;</code></div></div>
<span style="font-size: medium;">محاسبه تعداد کتاب‌هایی که هر مشتری امانت گرفته است:</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>SELECT Customers.FirstName, Customers.LastName, COUNT(BorrowedBooks.BorrowID) AS TotalBorrowedBooks<br />
FROM Customers<br />
LEFT JOIN BorrowedBooks ON Customers.CustomerID = BorrowedBooks.CustomerID<br />
GROUP BY Customers.FirstName, Customers.LastName;</code></div></div>
<span style="font-size: medium;">محاسبه تعداد کتاب‌هایی که هر نویسنده نوشته و میانگین تاریخ انتشار آن‌ها:</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>SELECT Authors.FirstName, Authors.LastName, COUNT(Books.BookID) AS TotalBooks,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AVG(PublicationYear) AS AveragePublicationYear<br />
FROM Authors<br />
LEFT JOIN Books ON Authors.AuthorID = Books.AuthorID<br />
GROUP BY Authors.FirstName, Authors.LastName;</code></div></div>
<span style="font-size: medium;">محاسبه تعداد کتاب‌های هر ژانر:</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>SELECT Genre, COUNT(BookID) AS TotalBooks<br />
FROM Books<br />
GROUP BY Genre;</code></div></div>
<span style="font-size: medium;">این مثال‌ها نمایش می‌دهند که چگونه می‌توانید با استفاده از SQL کوئری‌ها محاسبات مختلفی را روی داده‌های جداول انجام دهید. بر اساس نیاز‌های خود می‌توانید محاسبات دلخواه دیگری را نیز ایجاد کنید.</span><br />
<div style="text-align: justify;"><span style="font-size: medium;">حالا چند نمونه از ویوها (Views)، توابع (Functions)، و پروسیجرها (Stored Procedures) را برای جداول فوق ارائه می‌دهم:</span></div>
<br />
<span style="font-size: medium;"><span style="font-weight: bold;">View:</span><br />
ویویی برای نمایش اطلاعات کتاب‌ها به همراه نویسنده آن‌ها:</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>CREATE VIEW BookDetails AS<br />
SELECT Books.Title, Authors.FirstName, Authors.LastName, Books.PublicationYear, Books.Genre<br />
FROM Books<br />
INNER JOIN Authors ON Books.AuthorID = Authors.AuthorID;</code></div></div>
<span style="font-size: medium;"><span style="font-weight: bold;">Function:</span></span><br />
<span style="font-size: medium;">فانکشنی برای محاسبه سن متوسط نویسندگان:</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>CREATE FUNCTION CalculateAverageAuthorAge (@BirthYear INT)<br />
RETURNS INT<br />
AS<br />
BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;DECLARE @CurrentYear INT = YEAR(GETDATE());<br />
&nbsp;&nbsp;&nbsp;&nbsp;RETURN @CurrentYear - @BirthYear;<br />
END;</code></div></div>
<span style="font-weight: bold;"><span style="font-size: medium;">Stored Procedure:</span></span><br />
<span style="font-size: medium;">پروسیجری برای اضافه کردن یک کتاب جدید به جدول کتب:</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>CREATE PROCEDURE AddNewBook<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Title VARCHAR(100),<br />
&nbsp;&nbsp;&nbsp;&nbsp;@AuthorID INT,<br />
&nbsp;&nbsp;&nbsp;&nbsp;@PublicationYear INT,<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Genre VARCHAR(50)<br />
AS<br />
BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;INSERT INTO Books (Title, AuthorID, PublicationYear, Genre)<br />
&nbsp;&nbsp;&nbsp;&nbsp;VALUES (@Title, @AuthorID, @PublicationYear, @Genre);<br />
END;</code></div></div>
<span style="font-size: medium;"><div style="text-align: justify;">این مثال‌ها نشان می‌دهند که چگونه می‌توانید ویوها، توابع، و پروسیجرهای مختلف را برای انجام کارهای مختلف بر روی داده‌های جداول تعریف کنید. بر اساس نیاز‌های خود می‌توانید این موارد را گسترش دهید و ویوها را برای نمایش اطلاعات خاص، توابع را برای محاسبات مختلف، و پروسیجرها را برای انجام عملیات‌های پیچیده‌تر استفاده کنید.<br />
</div></span><br />
<div style="text-align: justify;"><span style="font-size: medium;">اینجا یک نمونه کرسر (Cursor) و یک تریگر (Trigger) برای جدول‌های Authors و Books ارائه می‌شود:<br />
<br />
<span style="font-weight: bold;">Cursor:</span><br />
این کرسر برای نمایش نویسندگانی که سن آن‌ها بیشتر از 50 سال است، ایجاد می‌شود:</span></div>
<br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>DECLARE @AuthorID INT;<br />
DECLARE @FirstName VARCHAR(50);<br />
DECLARE @LastName VARCHAR(50);<br />
DECLARE @BirthYear INT;<br />
<br />
DECLARE AuthorCursor CURSOR FOR<br />
SELECT AuthorID, FirstName, LastName, BirthYear<br />
FROM Authors<br />
WHERE DATEDIFF(YEAR, BirthYear, GETDATE()) &gt; 50;<br />
<br />
OPEN AuthorCursor;<br />
<br />
FETCH NEXT FROM AuthorCursor INTO @AuthorID, @FirstName, @LastName, @BirthYear;<br />
<br />
WHILE @@FETCH_STATUS = 0<br />
BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;PRINT 'Author ID: ' + CAST(@AuthorID AS VARCHAR) + ', Name: ' + @FirstName + ' ' + @LastName + ', Birth Year: ' + CAST(@BirthYear AS VARCHAR);<br />
&nbsp;&nbsp;&nbsp;&nbsp;FETCH NEXT FROM AuthorCursor INTO @AuthorID, @FirstName, @LastName, @BirthYear;<br />
END;<br />
<br />
CLOSE AuthorCursor;<br />
DEALLOCATE AuthorCursor;</code></div></div>
<div style="text-align: justify;"><span style="font-size: medium;"><span style="font-weight: bold;">Trigger:</span><br />
این تریگر برای افزودن کتاب جدید به جدول Books با توجه به سال انتشار آن و ژانر، نمونه‌ای از یک تریگر است:</span></div>
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>CREATE TRIGGER CheckBookGenre<br />
ON Books<br />
AFTER INSERT<br />
AS<br />
BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;DECLARE @Genre VARCHAR(50);<br />
&nbsp;&nbsp;&nbsp;&nbsp;DECLARE @PublicationYear INT;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT @Genre = inserted.Genre, @PublicationYear = inserted.PublicationYear<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM inserted;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;IF @Genre = 'Mystery' AND @PublicationYear &lt; 2000<br />
&nbsp;&nbsp;&nbsp;&nbsp;BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RAISEERROR('Books in the Mystery genre published before 2000 are not allowed.', 16, 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ROLLBACK;<br />
&nbsp;&nbsp;&nbsp;&nbsp;END;<br />
END;</code></div></div>
<div style="text-align: justify;"><span style="font-size: medium;">تریگر CheckBookGenre هر زمان که یک کتاب به جدول Books اضافه می‌شود، بررسی می‌کند که آیا ژانر کتاب Mystery است و سال انتشار آن کمتر از 2000 است یا نه. اگر شرایط صدق کنند، یک خطای اجرایی (Error) ایجاد می‌کند و اضافه کردن کتاب را بازنگری می‌کند.</span></div>
<div style="text-align: justify;"><span style="font-size: medium;">اینجا یک نمونه پروسیجر برای انجام عملیات آپدیت روی جدول Authors در نظر گرفته شده است:</span></div>
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>CREATE PROCEDURE UpdateAuthor<br />
&nbsp;&nbsp;&nbsp;&nbsp;@AuthorID INT,<br />
&nbsp;&nbsp;&nbsp;&nbsp;@NewFirstName VARCHAR(50),<br />
&nbsp;&nbsp;&nbsp;&nbsp;@NewLastName VARCHAR(50),<br />
&nbsp;&nbsp;&nbsp;&nbsp;@NewBirthYear INT<br />
AS<br />
BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;UPDATE Authors<br />
&nbsp;&nbsp;&nbsp;&nbsp;SET FirstName = @NewFirstName,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LastName = @NewLastName,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BirthYear = @NewBirthYear<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHERE AuthorID = @AuthorID;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;IF @@ROWCOUNT = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RAISEERROR('Author with ID ' + CAST(@AuthorID AS VARCHAR) + ' not found.', 16, 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETURN;<br />
&nbsp;&nbsp;&nbsp;&nbsp;END;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;PRINT 'Author with ID ' + CAST(@AuthorID AS VARCHAR) + ' updated successfully.';<br />
END;</code></div></div>
<span style="font-size: medium;"><div style="text-align: justify;">این پروسیجر به عنوان ورودی شناسه نویسنده (AuthorID) و مشخصات جدید نویسنده شامل نام (@NewFirstName)، نام خانوادگی (@NewLastName) و سال تولد (@NewBirthYear) را می‌پذیرد. سپس اطلاعات نویسنده با شناسه داده شده بروزرسانی می‌شود. اگر هیچ ردیفی آپدیت نشود (یعنی نویسنده با شناسه داده شده وجود نداشته باشد)، یک خطای اجرایی ایجاد می‌شود. در غیر این صورت پیامی با موفقیت آپدیت شدن نویسنده نمایش داده می‌شود.<br />
برای استفاده از این پروسیجر، می‌توانید کوئری زیر را اجرا کنید:<br />
</div></span><div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>EXEC UpdateAuthor @AuthorID = 1, @NewFirstName = 'John', @NewLastName = 'Doe', @NewBirthYear = 1980;</code></div></div>
<div style="text-align: justify;"><span style="font-size: medium;">در این مثال، نویسنده با شناسه 1 به نام "John Doe" و با سال تولد 1980 آپدیت می‌شود.</span></div>]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;"><span style="font-size: medium;"><div style="text-align: justify;">Library Management System SQL Server Database with Tables, View, Stored Procedures, Trigger and function and some sample data</div></span></span><br />
<span style="font-size: large;"><div style="text-align: justify;">فرض کنید یک پایگاه داده برای مدیریت کتابخانه ایجاد می کنیم. در این پایگاه داده چهار جدول زیر وجود دارد:</div></span><br />
<div style="text-align: justify;"><span style="font-size: medium;"><br />
<span style="font-weight: bold;">Books (کتاب‌ها)</span><br />
BookID (شناسه کتاب): شناسه یکتای هر کتاب<br />
Title (عنوان): عنوان کتاب<br />
Author (نویسنده): نویسنده کتاب<br />
PublicationYear (سال انتشار): سال انتشار کتاب<br />
Genre (ژانر): ژانر یا دسته‌بندی کتاب<br />
<br />
<span style="font-weight: bold;">Authors (نویسندگان)</span><br />
AuthorID (شناسه نویسنده): شناسه یکتای هر نویسنده<br />
FirstName (نام): نام نویسنده<br />
LastName (نام خانوادگی): نام خانوادگی نویسنده<br />
BirthYear (سال تولد): سال تولد نویسنده<br />
<br />
<span style="font-weight: bold;">Customers (مشتریان)</span><br />
CustomerID (شناسه مشتری): شناسه یکتای هر مشتری<br />
FirstName (نام): نام مشتری<br />
LastName (نام خانوادگی): نام خانوادگی مشتری<br />
Email (ایمیل): آدرس ایمیل مشتری<br />
PhoneNumber (شماره تلفن): شماره تلفن مشتری<br />
<br />
<span style="font-weight: bold;">BorrowedBooks (کتاب‌های امانی)</span><br />
BorrowID (شناسه امانت): شناسه یکتای هر امانت کتاب به مشتری<br />
CustomerID (شناسه مشتری): شناسه مشتری که کتاب را امانت گرفته است<br />
BookID (شناسه کتاب): شناسه کتابی که به مشتری امانت داده شده است<br />
BorrowDate (تاریخ امانت): تاریخی که کتاب به مشتری امانت داده شده است<br />
ReturnDate (تاریخ بازگشت): تاریخی که کتاب از مشتری بازگشت داده شده است<br />
حالا می توانیم کد SQL Server برای ایجاد این جداول را بنویسیم. در اینجا از دستورات T-SQL استفاده می کنیم:</span></div>
<br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>-- Create Authors table<br />
CREATE TABLE Authors (<br />
&nbsp;&nbsp;&nbsp;&nbsp;AuthorID INT PRIMARY KEY,<br />
&nbsp;&nbsp;&nbsp;&nbsp;FirstName VARCHAR(50),<br />
&nbsp;&nbsp;&nbsp;&nbsp;LastName VARCHAR(50),<br />
&nbsp;&nbsp;&nbsp;&nbsp;BirthYear INT<br />
);<br />
<br />
-- Create Books table<br />
CREATE TABLE Books (<br />
&nbsp;&nbsp;&nbsp;&nbsp;BookID INT PRIMARY KEY,<br />
&nbsp;&nbsp;&nbsp;&nbsp;Title VARCHAR(100),<br />
&nbsp;&nbsp;&nbsp;&nbsp;AuthorID INT,<br />
&nbsp;&nbsp;&nbsp;&nbsp;PublicationYear INT,<br />
&nbsp;&nbsp;&nbsp;&nbsp;Genre VARCHAR(50),<br />
&nbsp;&nbsp;&nbsp;&nbsp;FOREIGN KEY (AuthorID) REFERENCES Authors(AuthorID)<br />
);<br />
<br />
-- Create Customers table<br />
CREATE TABLE Customers (<br />
&nbsp;&nbsp;&nbsp;&nbsp;CustomerID INT PRIMARY KEY,<br />
&nbsp;&nbsp;&nbsp;&nbsp;FirstName VARCHAR(50),<br />
&nbsp;&nbsp;&nbsp;&nbsp;LastName VARCHAR(50),<br />
&nbsp;&nbsp;&nbsp;&nbsp;Email VARCHAR(100),<br />
&nbsp;&nbsp;&nbsp;&nbsp;PhoneNumber VARCHAR(20)<br />
);<br />
<br />
-- Create BorrowedBooks table<br />
CREATE TABLE BorrowedBooks (<br />
&nbsp;&nbsp;&nbsp;&nbsp;BorrowID INT PRIMARY KEY,<br />
&nbsp;&nbsp;&nbsp;&nbsp;CustomerID INT,<br />
&nbsp;&nbsp;&nbsp;&nbsp;BookID INT,<br />
&nbsp;&nbsp;&nbsp;&nbsp;BorrowDate DATE,<br />
&nbsp;&nbsp;&nbsp;&nbsp;ReturnDate DATE,<br />
&nbsp;&nbsp;&nbsp;&nbsp;FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID),<br />
&nbsp;&nbsp;&nbsp;&nbsp;FOREIGN KEY (BookID) REFERENCES Books(BookID)<br />
);</code></div></div>
<span style="font-size: medium;"><div style="text-align: justify;">این کد SQL یک پایگاه داده با چهار جدول ایجاد می کند و ارتباطات بین آن‌ها را تعیین می‌کند. برای ایجاد این جداول در SQL Server، شما می توانید از نرم‌افزار SQL Server Management Studio یا هر ابزار مشابه دیگری استفاده کنید. می‌توانید رکوردهای نمونه برای جداول مختلف را ایجاد کنید. در اینجا چند رکورد نمونه برای هر جدول ارائه داده شده است:</div></span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>-- افزودن رکوردهای نمونه به Authors table<br />
INSERT INTO Authors (AuthorID, FirstName, LastName, BirthYear)<br />
VALUES<br />
&nbsp;&nbsp;&nbsp;&nbsp;(1, 'John', 'Doe', 1980),<br />
&nbsp;&nbsp;&nbsp;&nbsp;(2, 'Jane', 'Smith', 1975),<br />
&nbsp;&nbsp;&nbsp;&nbsp;(3, 'Michael', 'Johnson', 1990);<br />
<br />
-- افزودن رکوردهای نمونه به Books table<br />
INSERT INTO Books (BookID, Title, AuthorID, PublicationYear, Genre)<br />
VALUES<br />
&nbsp;&nbsp;&nbsp;&nbsp;(101, 'Sample Book 1', 1, 2010, 'Fiction'),<br />
&nbsp;&nbsp;&nbsp;&nbsp;(102, 'Sample Book 2', 2, 2015, 'Mystery'),<br />
&nbsp;&nbsp;&nbsp;&nbsp;(103, 'Sample Book 3', 3, 2020, 'Science Fiction');<br />
<br />
-- افزودن رکوردهای نمونه به Customers table<br />
INSERT INTO Customers (CustomerID, FirstName, LastName, Email, PhoneNumber)<br />
VALUES<br />
&nbsp;&nbsp;&nbsp;&nbsp;(1001, 'Alice', 'Johnson', 'alice@example.com', '123-456-7890'),<br />
&nbsp;&nbsp;&nbsp;&nbsp;(1002, 'Bob', 'Smith', 'bob@example.com', '987-654-3210'),<br />
&nbsp;&nbsp;&nbsp;&nbsp;(1003, 'Carol', 'Davis', 'carol@example.com', '111-222-3333');<br />
<br />
-- افزودن رکوردهای نمونه به BorrowedBooks table<br />
INSERT INTO BorrowedBooks (BorrowID, CustomerID, BookID, BorrowDate, ReturnDate)<br />
VALUES<br />
&nbsp;&nbsp;&nbsp;&nbsp;(10001, 1001, 101, '2023-09-01', '2023-09-15'),<br />
&nbsp;&nbsp;&nbsp;&nbsp;(10002, 1002, 102, '2023-09-05', '2023-09-20'),<br />
&nbsp;&nbsp;&nbsp;&nbsp;(10003, 1003, 103, '2023-09-10', '2023-09-25');</code></div></div>
<span style="font-size: large;"><div style="text-align: justify;">این کد SQL رکوردهای نمونه را به هر یک از جداول اضافه می‌کند. می‌توانید این کد را به کمک SQL Server Management Studio یا ابزار مدیریت دیگر اجرا کنید تا رکوردهای نمونه ایجاد شوند.<br />
بر اساس جدول های بالا چند کوئری نمونه برای ساخت جداول انجام دادیم. حالا چند کوئری برای انجام عملیات مختلف روی این جداول به شما ارائه می‌دهم:<br />
</div></span><br />
<span style="font-size: medium;">بازیابی همه کتاب‌ها به همراه نویسنده‌هایشان:</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>SELECT Books.Title, Authors.FirstName, Authors.LastName<br />
FROM Books<br />
INNER JOIN Authors ON Books.AuthorID = Authors.AuthorID;</code></div></div>
<span style="font-size: medium;">بازیابی تمام مشتریان و کتاب‌هایی که به اختیار آن‌ها قرار گرفته است:</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>SELECT Customers.FirstName, Customers.LastName, Books.Title<br />
FROM Customers<br />
INNER JOIN BorrowedBooks ON Customers.CustomerID = BorrowedBooks.CustomerID<br />
INNER JOIN Books ON BorrowedBooks.BookID = Books.BookID;</code></div></div>
<span style="font-size: medium;">بازیابی تعداد کتاب‌هایی که هر نویسنده نوشته است:</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>SELECT Authors.FirstName, Authors.LastName, COUNT(Books.BookID) AS TotalBooks<br />
FROM Authors<br />
LEFT JOIN Books ON Authors.AuthorID = Books.AuthorID<br />
GROUP BY Authors.FirstName, Authors.LastName;</code></div></div>
<span style="font-size: medium;">بازیابی تاریخ بازگشت کتاب‌ها بر اساس نام مشتری:</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>SELECT Customers.FirstName, Customers.LastName, Books.Title, BorrowedBooks.ReturnDate<br />
FROM Customers<br />
INNER JOIN BorrowedBooks ON Customers.CustomerID = BorrowedBooks.CustomerID<br />
INNER JOIN Books ON BorrowedBooks.BookID = Books.BookID<br />
ORDER BY Customers.FirstName, Customers.LastName;</code></div></div>
<span style="font-size: medium;"><div style="text-align: justify;">این کوئری‌ها فقط چند نمونه از کوئری‌های ممکن برای این جداول هستند. شما می‌توانید کوئری‌های مختلفی بر اساس نیاز خود ایجاد کنید تا اطلاعات مورد نظر را بازیابی کنید.</div></span><br />
<span style="font-size: medium;"><div style="text-align: justify;">البته در مورد محاسباتی، برای محاسبه مقادیر جدید از داده‌های موجود استفاده می‌شود. در این مثال‌ها، محاسبات را بر روی داده‌های جداول تعریف کرده و نتایج را به نمایش می‌گذاریم:<br />
</div></span><br />
<div style="text-align: justify;"><span style="font-size: medium;">محاسبه میانگین سال تولید کتب:</span></div>
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>SELECT AVG(PublicationYear) AS AveragePublicationYear<br />
FROM Books;</code></div></div>
<span style="font-size: medium;">محاسبه تعداد کتاب‌هایی که هر مشتری امانت گرفته است:</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>SELECT Customers.FirstName, Customers.LastName, COUNT(BorrowedBooks.BorrowID) AS TotalBorrowedBooks<br />
FROM Customers<br />
LEFT JOIN BorrowedBooks ON Customers.CustomerID = BorrowedBooks.CustomerID<br />
GROUP BY Customers.FirstName, Customers.LastName;</code></div></div>
<span style="font-size: medium;">محاسبه تعداد کتاب‌هایی که هر نویسنده نوشته و میانگین تاریخ انتشار آن‌ها:</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>SELECT Authors.FirstName, Authors.LastName, COUNT(Books.BookID) AS TotalBooks,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AVG(PublicationYear) AS AveragePublicationYear<br />
FROM Authors<br />
LEFT JOIN Books ON Authors.AuthorID = Books.AuthorID<br />
GROUP BY Authors.FirstName, Authors.LastName;</code></div></div>
<span style="font-size: medium;">محاسبه تعداد کتاب‌های هر ژانر:</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>SELECT Genre, COUNT(BookID) AS TotalBooks<br />
FROM Books<br />
GROUP BY Genre;</code></div></div>
<span style="font-size: medium;">این مثال‌ها نمایش می‌دهند که چگونه می‌توانید با استفاده از SQL کوئری‌ها محاسبات مختلفی را روی داده‌های جداول انجام دهید. بر اساس نیاز‌های خود می‌توانید محاسبات دلخواه دیگری را نیز ایجاد کنید.</span><br />
<div style="text-align: justify;"><span style="font-size: medium;">حالا چند نمونه از ویوها (Views)، توابع (Functions)، و پروسیجرها (Stored Procedures) را برای جداول فوق ارائه می‌دهم:</span></div>
<br />
<span style="font-size: medium;"><span style="font-weight: bold;">View:</span><br />
ویویی برای نمایش اطلاعات کتاب‌ها به همراه نویسنده آن‌ها:</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>CREATE VIEW BookDetails AS<br />
SELECT Books.Title, Authors.FirstName, Authors.LastName, Books.PublicationYear, Books.Genre<br />
FROM Books<br />
INNER JOIN Authors ON Books.AuthorID = Authors.AuthorID;</code></div></div>
<span style="font-size: medium;"><span style="font-weight: bold;">Function:</span></span><br />
<span style="font-size: medium;">فانکشنی برای محاسبه سن متوسط نویسندگان:</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>CREATE FUNCTION CalculateAverageAuthorAge (@BirthYear INT)<br />
RETURNS INT<br />
AS<br />
BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;DECLARE @CurrentYear INT = YEAR(GETDATE());<br />
&nbsp;&nbsp;&nbsp;&nbsp;RETURN @CurrentYear - @BirthYear;<br />
END;</code></div></div>
<span style="font-weight: bold;"><span style="font-size: medium;">Stored Procedure:</span></span><br />
<span style="font-size: medium;">پروسیجری برای اضافه کردن یک کتاب جدید به جدول کتب:</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>CREATE PROCEDURE AddNewBook<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Title VARCHAR(100),<br />
&nbsp;&nbsp;&nbsp;&nbsp;@AuthorID INT,<br />
&nbsp;&nbsp;&nbsp;&nbsp;@PublicationYear INT,<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Genre VARCHAR(50)<br />
AS<br />
BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;INSERT INTO Books (Title, AuthorID, PublicationYear, Genre)<br />
&nbsp;&nbsp;&nbsp;&nbsp;VALUES (@Title, @AuthorID, @PublicationYear, @Genre);<br />
END;</code></div></div>
<span style="font-size: medium;"><div style="text-align: justify;">این مثال‌ها نشان می‌دهند که چگونه می‌توانید ویوها، توابع، و پروسیجرهای مختلف را برای انجام کارهای مختلف بر روی داده‌های جداول تعریف کنید. بر اساس نیاز‌های خود می‌توانید این موارد را گسترش دهید و ویوها را برای نمایش اطلاعات خاص، توابع را برای محاسبات مختلف، و پروسیجرها را برای انجام عملیات‌های پیچیده‌تر استفاده کنید.<br />
</div></span><br />
<div style="text-align: justify;"><span style="font-size: medium;">اینجا یک نمونه کرسر (Cursor) و یک تریگر (Trigger) برای جدول‌های Authors و Books ارائه می‌شود:<br />
<br />
<span style="font-weight: bold;">Cursor:</span><br />
این کرسر برای نمایش نویسندگانی که سن آن‌ها بیشتر از 50 سال است، ایجاد می‌شود:</span></div>
<br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>DECLARE @AuthorID INT;<br />
DECLARE @FirstName VARCHAR(50);<br />
DECLARE @LastName VARCHAR(50);<br />
DECLARE @BirthYear INT;<br />
<br />
DECLARE AuthorCursor CURSOR FOR<br />
SELECT AuthorID, FirstName, LastName, BirthYear<br />
FROM Authors<br />
WHERE DATEDIFF(YEAR, BirthYear, GETDATE()) &gt; 50;<br />
<br />
OPEN AuthorCursor;<br />
<br />
FETCH NEXT FROM AuthorCursor INTO @AuthorID, @FirstName, @LastName, @BirthYear;<br />
<br />
WHILE @@FETCH_STATUS = 0<br />
BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;PRINT 'Author ID: ' + CAST(@AuthorID AS VARCHAR) + ', Name: ' + @FirstName + ' ' + @LastName + ', Birth Year: ' + CAST(@BirthYear AS VARCHAR);<br />
&nbsp;&nbsp;&nbsp;&nbsp;FETCH NEXT FROM AuthorCursor INTO @AuthorID, @FirstName, @LastName, @BirthYear;<br />
END;<br />
<br />
CLOSE AuthorCursor;<br />
DEALLOCATE AuthorCursor;</code></div></div>
<div style="text-align: justify;"><span style="font-size: medium;"><span style="font-weight: bold;">Trigger:</span><br />
این تریگر برای افزودن کتاب جدید به جدول Books با توجه به سال انتشار آن و ژانر، نمونه‌ای از یک تریگر است:</span></div>
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>CREATE TRIGGER CheckBookGenre<br />
ON Books<br />
AFTER INSERT<br />
AS<br />
BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;DECLARE @Genre VARCHAR(50);<br />
&nbsp;&nbsp;&nbsp;&nbsp;DECLARE @PublicationYear INT;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT @Genre = inserted.Genre, @PublicationYear = inserted.PublicationYear<br />
&nbsp;&nbsp;&nbsp;&nbsp;FROM inserted;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;IF @Genre = 'Mystery' AND @PublicationYear &lt; 2000<br />
&nbsp;&nbsp;&nbsp;&nbsp;BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RAISEERROR('Books in the Mystery genre published before 2000 are not allowed.', 16, 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ROLLBACK;<br />
&nbsp;&nbsp;&nbsp;&nbsp;END;<br />
END;</code></div></div>
<div style="text-align: justify;"><span style="font-size: medium;">تریگر CheckBookGenre هر زمان که یک کتاب به جدول Books اضافه می‌شود، بررسی می‌کند که آیا ژانر کتاب Mystery است و سال انتشار آن کمتر از 2000 است یا نه. اگر شرایط صدق کنند، یک خطای اجرایی (Error) ایجاد می‌کند و اضافه کردن کتاب را بازنگری می‌کند.</span></div>
<div style="text-align: justify;"><span style="font-size: medium;">اینجا یک نمونه پروسیجر برای انجام عملیات آپدیت روی جدول Authors در نظر گرفته شده است:</span></div>
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>CREATE PROCEDURE UpdateAuthor<br />
&nbsp;&nbsp;&nbsp;&nbsp;@AuthorID INT,<br />
&nbsp;&nbsp;&nbsp;&nbsp;@NewFirstName VARCHAR(50),<br />
&nbsp;&nbsp;&nbsp;&nbsp;@NewLastName VARCHAR(50),<br />
&nbsp;&nbsp;&nbsp;&nbsp;@NewBirthYear INT<br />
AS<br />
BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;UPDATE Authors<br />
&nbsp;&nbsp;&nbsp;&nbsp;SET FirstName = @NewFirstName,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LastName = @NewLastName,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BirthYear = @NewBirthYear<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHERE AuthorID = @AuthorID;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;IF @@ROWCOUNT = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RAISEERROR('Author with ID ' + CAST(@AuthorID AS VARCHAR) + ' not found.', 16, 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETURN;<br />
&nbsp;&nbsp;&nbsp;&nbsp;END;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;PRINT 'Author with ID ' + CAST(@AuthorID AS VARCHAR) + ' updated successfully.';<br />
END;</code></div></div>
<span style="font-size: medium;"><div style="text-align: justify;">این پروسیجر به عنوان ورودی شناسه نویسنده (AuthorID) و مشخصات جدید نویسنده شامل نام (@NewFirstName)، نام خانوادگی (@NewLastName) و سال تولد (@NewBirthYear) را می‌پذیرد. سپس اطلاعات نویسنده با شناسه داده شده بروزرسانی می‌شود. اگر هیچ ردیفی آپدیت نشود (یعنی نویسنده با شناسه داده شده وجود نداشته باشد)، یک خطای اجرایی ایجاد می‌شود. در غیر این صورت پیامی با موفقیت آپدیت شدن نویسنده نمایش داده می‌شود.<br />
برای استفاده از این پروسیجر، می‌توانید کوئری زیر را اجرا کنید:<br />
</div></span><div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>EXEC UpdateAuthor @AuthorID = 1, @NewFirstName = 'John', @NewLastName = 'Doe', @NewBirthYear = 1980;</code></div></div>
<div style="text-align: justify;"><span style="font-size: medium;">در این مثال، نویسنده با شناسه 1 به نام "John Doe" و با سال تولد 1980 آپدیت می‌شود.</span></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[کد نمونه C# برای ضرب دو عدد ممیزی با توجه به تنظیمات پیش‌فرض سیستم برای کاراکتر ممیز]]></title>
			<link>https://forum.a00b.com/showthread.php?tid=362</link>
			<pubDate>Sat, 09 Sep 2023 16:57:59 +0000</pubDate>
			<guid isPermaLink="false">https://forum.a00b.com/showthread.php?tid=362</guid>
			<description><![CDATA[<span style="font-size: large;"><div style="text-align: justify;">کد نمونه C# برای ضرب دو عدد ممیزی با توجه به تنظیمات پیش‌فرض سیستم برای همه نوع کاراکتر های مختلف برای جداککنده ممیز در اعداد اعشاری<br />
برای تبدیل رشته‌های ورودی به عدد دسیمال با توجه به تنظیمات پیش‌فرض سیستم (با توجه به اینکه هر سیستمی برای جداکننده ممیز ممکن است از یکی از کاراکتر های . یا / یا , و یا . . . استفاده نماید) باید از CultureInfo.CurrentCulture استفاده کنید تا ممیز اعشار و سپریتور معین شده و ثبت شده در سیستم را تشخیص دهید. در زیر نمونه کدی با این رویکرد آمده است:</div></span><br />
<br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>using System;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (1) ایمپورت فضای نام System برای استفاده از کلاس‌ها و متدها<br />
using System.Globalization;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (2) ایمپورت فضای نام System.Globalization برای استفاده از CultureInfo<br />
<br />
namespace DecimalMultiplicationApp<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;public partial class MainForm : Form<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public MainForm()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitializeComponent();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (3) متد کانستراکتور فرم را فراخوانی می‌کند<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private void multiplyButton_Click(object sender, EventArgs e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string input1 = textBox1.Text;&nbsp;&nbsp;// (4) مقدار ورودی از TextBox1 را در متغیر input1 ذخیره می‌کند<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string input2 = textBox2.Text;&nbsp;&nbsp;// (5) مقدار ورودی از TextBox2 را در متغیر input2 ذخیره می‌کند<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (decimal.TryParse(input1, NumberStyles.Float, CultureInfo.CurrentCulture, out decimal number1) &amp;&amp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;decimal.TryParse(input2, NumberStyles.Float, CultureInfo.CurrentCulture, out decimal number2))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (6) اگر تبدیل به عدد دسیمال با موفقیت انجام شود، وارد این بلوک شده و عمل ضرب را انجام می‌دهد<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;decimal result = number1 * number2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resultLabel.Text = "Result: " + result.ToString();&nbsp;&nbsp;// (7) نتیجه را در Label نمایش می‌دهد<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (8) اگر تبدیل به عدد دسیمال با مشکل مواجه شود، پیام خطا نمایش داده می‌شود<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show("Invalid input. Please enter valid decimal numbers.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code></div></div>
<br />
<span style="font-size: large;"><div style="text-align: justify;">در این کد، NumberStyles.Float به decimal.TryParse() اضافه شده است تا به اعشار و سپریتور صداقت معین شده در تنظیمات پیش‌فرض سیستم پایبند باشد. اینطوری، برنامه باید با توجه به تنظیمات محلی سیستم عمل کند و نیازی به تنظیم دستی نیست.</div></span>]]></description>
			<content:encoded><![CDATA[<span style="font-size: large;"><div style="text-align: justify;">کد نمونه C# برای ضرب دو عدد ممیزی با توجه به تنظیمات پیش‌فرض سیستم برای همه نوع کاراکتر های مختلف برای جداککنده ممیز در اعداد اعشاری<br />
برای تبدیل رشته‌های ورودی به عدد دسیمال با توجه به تنظیمات پیش‌فرض سیستم (با توجه به اینکه هر سیستمی برای جداکننده ممیز ممکن است از یکی از کاراکتر های . یا / یا , و یا . . . استفاده نماید) باید از CultureInfo.CurrentCulture استفاده کنید تا ممیز اعشار و سپریتور معین شده و ثبت شده در سیستم را تشخیص دهید. در زیر نمونه کدی با این رویکرد آمده است:</div></span><br />
<br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>using System;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (1) ایمپورت فضای نام System برای استفاده از کلاس‌ها و متدها<br />
using System.Globalization;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (2) ایمپورت فضای نام System.Globalization برای استفاده از CultureInfo<br />
<br />
namespace DecimalMultiplicationApp<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;public partial class MainForm : Form<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public MainForm()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitializeComponent();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (3) متد کانستراکتور فرم را فراخوانی می‌کند<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private void multiplyButton_Click(object sender, EventArgs e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string input1 = textBox1.Text;&nbsp;&nbsp;// (4) مقدار ورودی از TextBox1 را در متغیر input1 ذخیره می‌کند<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string input2 = textBox2.Text;&nbsp;&nbsp;// (5) مقدار ورودی از TextBox2 را در متغیر input2 ذخیره می‌کند<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (decimal.TryParse(input1, NumberStyles.Float, CultureInfo.CurrentCulture, out decimal number1) &amp;&amp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;decimal.TryParse(input2, NumberStyles.Float, CultureInfo.CurrentCulture, out decimal number2))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (6) اگر تبدیل به عدد دسیمال با موفقیت انجام شود، وارد این بلوک شده و عمل ضرب را انجام می‌دهد<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;decimal result = number1 * number2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resultLabel.Text = "Result: " + result.ToString();&nbsp;&nbsp;// (7) نتیجه را در Label نمایش می‌دهد<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (8) اگر تبدیل به عدد دسیمال با مشکل مواجه شود، پیام خطا نمایش داده می‌شود<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show("Invalid input. Please enter valid decimal numbers.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code></div></div>
<br />
<span style="font-size: large;"><div style="text-align: justify;">در این کد، NumberStyles.Float به decimal.TryParse() اضافه شده است تا به اعشار و سپریتور صداقت معین شده در تنظیمات پیش‌فرض سیستم پایبند باشد. اینطوری، برنامه باید با توجه به تنظیمات محلی سیستم عمل کند و نیازی به تنظیم دستی نیست.</div></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[مزیت استفاده از بلاک های using در برنامه نویسی C# سی شارپ]]></title>
			<link>https://forum.a00b.com/showthread.php?tid=361</link>
			<pubDate>Fri, 08 Sep 2023 11:11:03 +0000</pubDate>
			<guid isPermaLink="false">https://forum.a00b.com/showthread.php?tid=361</guid>
			<description><![CDATA[<span style="font-size: medium;"><div style="text-align: justify;"> <span style="font-weight: bold;">این تریک به شما نشان می‌دهد چگونه با استفاده از دستور using به منظور مدیریت منابع، یک فایل را به صورت ایمنی باز و بسته کنید.<br />
توضیحات:<br />
<span style="color: #C71585;">using Statement: </span>دستور using در C# برای مدیریت منابع خارجی مانند فایل‌ها یا پایگاه داده‌ها استفاده می‌شود. این دستور به صورت خودکار منابع را بسته می‌کند بعد از اتمام عملیات مورد نیاز. این کار به جلوگیری از نشتی منابع کمک می‌کند.<br />
حالا می‌خواهیم یک فایل متنی با نام "example.txt" را باز کنیم، اطلاعات مربوط به آن را بخوانیم و سپس فایل را ببندیم.</span><br />
<br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>using System;<br />
using System.IO;<br />
<br />
class Program<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;static void Main()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// مسیر فایل مورد نظر<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string filePath = "example.txt";<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// با استفاده از دستور using فایل را باز کنید<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;using (StreamReader reader = new StreamReader(filePath))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// خواندن محتوای فایل به صورت خط به خط<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string line;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while ((line = reader.ReadLine()) != null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(line); // نمایش محتوا در کنسول<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} // فایل به صورت خودکار بسته می‌شود<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch (FileNotFoundException)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#36;"فایل '{filePath}' یافت نشد.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch (IOException e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#36;"خطای ورودی/خروجی: {e.Message}");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code></div></div>
<span style="font-weight: bold;">در این تریک، ما از StreamReader برای خواندن فایل استفاده کردیم. وقتی از using برای تعریف StreamReader استفاده می‌کنیم، بلافاصله پس از اتمام کار، فایل به صورت خودکار بسته می‌شود. این ایمنی برای مدیریت منابع فایل بسیار مهم است. همچنین، در صورتی که فایل یافت نشود یا مشکلات ورودی/خروجی دیگری وجود داشته باشد، از کد مناسبی برای مدیریت خطاها استفاده کردیم.</span></div></span>]]></description>
			<content:encoded><![CDATA[<span style="font-size: medium;"><div style="text-align: justify;"> <span style="font-weight: bold;">این تریک به شما نشان می‌دهد چگونه با استفاده از دستور using به منظور مدیریت منابع، یک فایل را به صورت ایمنی باز و بسته کنید.<br />
توضیحات:<br />
<span style="color: #C71585;">using Statement: </span>دستور using در C# برای مدیریت منابع خارجی مانند فایل‌ها یا پایگاه داده‌ها استفاده می‌شود. این دستور به صورت خودکار منابع را بسته می‌کند بعد از اتمام عملیات مورد نیاز. این کار به جلوگیری از نشتی منابع کمک می‌کند.<br />
حالا می‌خواهیم یک فایل متنی با نام "example.txt" را باز کنیم، اطلاعات مربوط به آن را بخوانیم و سپس فایل را ببندیم.</span><br />
<br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>using System;<br />
using System.IO;<br />
<br />
class Program<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;static void Main()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// مسیر فایل مورد نظر<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string filePath = "example.txt";<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// با استفاده از دستور using فایل را باز کنید<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;using (StreamReader reader = new StreamReader(filePath))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// خواندن محتوای فایل به صورت خط به خط<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string line;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while ((line = reader.ReadLine()) != null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(line); // نمایش محتوا در کنسول<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} // فایل به صورت خودکار بسته می‌شود<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch (FileNotFoundException)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#36;"فایل '{filePath}' یافت نشد.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch (IOException e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#36;"خطای ورودی/خروجی: {e.Message}");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code></div></div>
<span style="font-weight: bold;">در این تریک، ما از StreamReader برای خواندن فایل استفاده کردیم. وقتی از using برای تعریف StreamReader استفاده می‌کنیم، بلافاصله پس از اتمام کار، فایل به صورت خودکار بسته می‌شود. این ایمنی برای مدیریت منابع فایل بسیار مهم است. همچنین، در صورتی که فایل یافت نشود یا مشکلات ورودی/خروجی دیگری وجود داشته باشد، از کد مناسبی برای مدیریت خطاها استفاده کردیم.</span></div></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[نسخه های SQL Server از ابتدا تا نسخه 2019 با توضیحات]]></title>
			<link>https://forum.a00b.com/showthread.php?tid=360</link>
			<pubDate>Thu, 07 Sep 2023 19:22:03 +0000</pubDate>
			<guid isPermaLink="false">https://forum.a00b.com/showthread.php?tid=360</guid>
			<description><![CDATA[<span style="font-size: large;"><div style="text-align: justify;">در زیر نسخه‌های SQL Server همراه با سال تولید و توضیحات مختصر آمده است:<br />
<br />
<span style="font-weight: bold;">SQL Server 1.0 (1989): </span>این نسخه اولین نسخه از SQL Server بود و توسط شرکت Microsoft منتشر شد. آن زمان، SQL Server 1.0 به عنوان OS/2 SQL Server شناخته می‌شد و برای سیستم‌عامل OS/2 ارائه می‌شد.<br />
<br />
<span style="font-weight: bold;">SQL Server 4.21a (1993):</span> این نسخه از SQL Server برای سیستم‌عامل Windows NT ارائه شد و به عنوان یکی از اولین نسخه‌های SQL Server برای سیستم‌عامل‌های ویندوز شناخته می‌شد.<br />
<br />
<span style="font-weight: bold;">SQL Server 6.0 (1995): SQL Server 6.0</span> یکی از نسخه‌های مهم SQL Server بود که امکانات گسترده‌تری را ارائه می‌داد و بهبود‌های مهمی در عملکرد و مدیریت دیتابیس داشت.<br />
<br />
<span style="font-weight: bold;">SQL Server 7.0 (1998):</span> این نسخه تغییرات بزرگی در معماری دیتابیس SQL Server به وجود آورد و با ویژگی‌های جدیدی مانند OLAP و افزایش قابلیت‌های تجزیه و تحلیل دیتا آمد.<br />
<br />
<span style="font-weight: bold;">SQL Server 2000 (2000):</span> این نسخه دارای افزایش قابلیت‌های XML و افزونه‌های تجاری برای انجام عملیات‌های کسب و کاری بود.<br />
<br />
<span style="font-weight: bold;">SQL Server 2005 (2005): SQL Server 2005</span> تغییرات مهمی در مدیریت و امنیت دیتابیس داشت و از زبان‌های برنامه‌نویسی جدیدی مانند C# پشتیبانی می‌کرد.<br />
<br />
<span style="font-weight: bold;">SQL Server 2008 (2008):</span> این نسخه دارای بهبودهای مهمی در عملکرد، مدیریت و همچنین امکانات جدیدی برای تجزیه و تحلیل دیتا بود.<br />
<br />
<span style="font-weight: bold;">SQL Server 2012 (2012):</span> این نسخه با معماری برای انجام عملیات‌های پیچیده تحلیل دیتا بهبود یافت.<br />
<br />
<span style="font-weight: bold;">SQL Server 2014 (2014):</span> این نسخه با مفاهیم جدید In-Memory OLTP و امنیت بهبود یافته ارائه شد.<br />
<br />
<span style="font-weight: bold;">SQL Server 2016 (2016):</span> این نسخه توانایی‌های تجزیه و تحلیل دیتا را با معماری جدیدی بهبود داد و پشتیبانی از Linux اضافه شد.<br />
<br />
<span style="font-weight: bold;">SQL Server 2017 (2017): </span>این نسخه امکانات Machine Learning و پشتیبانی از کانتینرها (container) را به SQL Server افزود.<br />
<br />
<span style="font-weight: bold;">SQL Server 2019 (2019):</span> این نسخه با قابلیت‌های بیشتری در حوزه‌های امنیت، تجزیه و تحلیل دیتا، و مدیریت عملکرد ارائه شد. همچنین امکان اجرای بخش‌هایی از دیتابیس در Umachine (Universal Machine) فراهم شد.<br />
<br />
لطفاً توجه داشته باشید که این توضیحات مختصری از نسخه‌های SQL Server هستند و هر نسخه دارای ویژگی‌ها و تغییرات جزئی بیشتری است که ممکن است بر اساس نیازهای خاص شما مورد استفاده قرار گیرد.</div></span>]]></description>
			<content:encoded><![CDATA[<span style="font-size: large;"><div style="text-align: justify;">در زیر نسخه‌های SQL Server همراه با سال تولید و توضیحات مختصر آمده است:<br />
<br />
<span style="font-weight: bold;">SQL Server 1.0 (1989): </span>این نسخه اولین نسخه از SQL Server بود و توسط شرکت Microsoft منتشر شد. آن زمان، SQL Server 1.0 به عنوان OS/2 SQL Server شناخته می‌شد و برای سیستم‌عامل OS/2 ارائه می‌شد.<br />
<br />
<span style="font-weight: bold;">SQL Server 4.21a (1993):</span> این نسخه از SQL Server برای سیستم‌عامل Windows NT ارائه شد و به عنوان یکی از اولین نسخه‌های SQL Server برای سیستم‌عامل‌های ویندوز شناخته می‌شد.<br />
<br />
<span style="font-weight: bold;">SQL Server 6.0 (1995): SQL Server 6.0</span> یکی از نسخه‌های مهم SQL Server بود که امکانات گسترده‌تری را ارائه می‌داد و بهبود‌های مهمی در عملکرد و مدیریت دیتابیس داشت.<br />
<br />
<span style="font-weight: bold;">SQL Server 7.0 (1998):</span> این نسخه تغییرات بزرگی در معماری دیتابیس SQL Server به وجود آورد و با ویژگی‌های جدیدی مانند OLAP و افزایش قابلیت‌های تجزیه و تحلیل دیتا آمد.<br />
<br />
<span style="font-weight: bold;">SQL Server 2000 (2000):</span> این نسخه دارای افزایش قابلیت‌های XML و افزونه‌های تجاری برای انجام عملیات‌های کسب و کاری بود.<br />
<br />
<span style="font-weight: bold;">SQL Server 2005 (2005): SQL Server 2005</span> تغییرات مهمی در مدیریت و امنیت دیتابیس داشت و از زبان‌های برنامه‌نویسی جدیدی مانند C# پشتیبانی می‌کرد.<br />
<br />
<span style="font-weight: bold;">SQL Server 2008 (2008):</span> این نسخه دارای بهبودهای مهمی در عملکرد، مدیریت و همچنین امکانات جدیدی برای تجزیه و تحلیل دیتا بود.<br />
<br />
<span style="font-weight: bold;">SQL Server 2012 (2012):</span> این نسخه با معماری برای انجام عملیات‌های پیچیده تحلیل دیتا بهبود یافت.<br />
<br />
<span style="font-weight: bold;">SQL Server 2014 (2014):</span> این نسخه با مفاهیم جدید In-Memory OLTP و امنیت بهبود یافته ارائه شد.<br />
<br />
<span style="font-weight: bold;">SQL Server 2016 (2016):</span> این نسخه توانایی‌های تجزیه و تحلیل دیتا را با معماری جدیدی بهبود داد و پشتیبانی از Linux اضافه شد.<br />
<br />
<span style="font-weight: bold;">SQL Server 2017 (2017): </span>این نسخه امکانات Machine Learning و پشتیبانی از کانتینرها (container) را به SQL Server افزود.<br />
<br />
<span style="font-weight: bold;">SQL Server 2019 (2019):</span> این نسخه با قابلیت‌های بیشتری در حوزه‌های امنیت، تجزیه و تحلیل دیتا، و مدیریت عملکرد ارائه شد. همچنین امکان اجرای بخش‌هایی از دیتابیس در Umachine (Universal Machine) فراهم شد.<br />
<br />
لطفاً توجه داشته باشید که این توضیحات مختصری از نسخه‌های SQL Server هستند و هر نسخه دارای ویژگی‌ها و تغییرات جزئی بیشتری است که ممکن است بر اساس نیازهای خاص شما مورد استفاده قرار گیرد.</div></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[توابع بازگشتی در SQL Server]]></title>
			<link>https://forum.a00b.com/showthread.php?tid=359</link>
			<pubDate>Tue, 05 Sep 2023 19:59:14 +0000</pubDate>
			<guid isPermaLink="false">https://forum.a00b.com/showthread.php?tid=359</guid>
			<description><![CDATA[<span style="font-weight: bold;"><span style="font-size: large;"><div style="text-align: justify;">در اینجا یک مثال از تابع بازگشتی در SQL Server آورده شده است که یک دنباله فیبوناچی تولید می‌کند:<br />
</div></span></span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>CREATE FUNCTION Fibonacci( @n INT )<br />
RETURNS TABLE<br />
AS<br />
RETURN<br />
(<br />
SELECT 0 AS n<br />
UNION ALL<br />
SELECT 1 AS n<br />
UNION ALL<br />
SELECT Fibonacci(@n - 1) + Fibonacci(@n - 2) AS n<br />
FROM Fibonacci( @n - 1 )<br />
);</code></div></div>
<br />
<span style="font-size: large;"><span style="font-weight: bold;"><div style="text-align: justify;">این تابع دو پارامتر ورودی دارد: @n که تعداد عناصر دنباله را مشخص می‌کند.<br />
تابع از دو عبارت UNION ALL استفاده می‌کند تا یک دنباله از عناصر دنباله فیبوناچی تولید کند. اولین عبارت UNION ALL دو عدد 0 و 1 را به دنباله اضافه می‌کند. عبارت دوم UNION ALL از نتیجه تابع بازگشتی خود برای تولید بقیه عناصر دنباله استفاده می‌کند.<br />
در اینجا مثالی از نحوه استفاده از این تابع آورده شده است:</div></span></span><br />
<br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>SELECT * FROM Fibonacci( 10 );</code></div></div>
<br />
<span style="font-weight: bold;"><span style="font-size: large;">این کوئری خروجی زیر را تولید می‌کند:</span></span><br />
<br />
<blockquote><cite>نقل قول: </cite>n<br />
-------<br />
0<br />
1<br />
1<br />
2<br />
3<br />
5<br />
8<br />
13<br />
21<br />
34</blockquote>
<span style="font-weight: bold;"><span style="font-size: large;"><div style="text-align: justify;">تابع بازگشتی در SQL Server یک راه قدرتمند برای تولید دنباله‌های تکراری است. این تابع می‌تواند برای تولید دنباله‌های فیبوناچی، دنباله‌های هندسی، و سایر دنباله‌های تکراری استفاده شود.</div></span></span>]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;"><span style="font-size: large;"><div style="text-align: justify;">در اینجا یک مثال از تابع بازگشتی در SQL Server آورده شده است که یک دنباله فیبوناچی تولید می‌کند:<br />
</div></span></span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>CREATE FUNCTION Fibonacci( @n INT )<br />
RETURNS TABLE<br />
AS<br />
RETURN<br />
(<br />
SELECT 0 AS n<br />
UNION ALL<br />
SELECT 1 AS n<br />
UNION ALL<br />
SELECT Fibonacci(@n - 1) + Fibonacci(@n - 2) AS n<br />
FROM Fibonacci( @n - 1 )<br />
);</code></div></div>
<br />
<span style="font-size: large;"><span style="font-weight: bold;"><div style="text-align: justify;">این تابع دو پارامتر ورودی دارد: @n که تعداد عناصر دنباله را مشخص می‌کند.<br />
تابع از دو عبارت UNION ALL استفاده می‌کند تا یک دنباله از عناصر دنباله فیبوناچی تولید کند. اولین عبارت UNION ALL دو عدد 0 و 1 را به دنباله اضافه می‌کند. عبارت دوم UNION ALL از نتیجه تابع بازگشتی خود برای تولید بقیه عناصر دنباله استفاده می‌کند.<br />
در اینجا مثالی از نحوه استفاده از این تابع آورده شده است:</div></span></span><br />
<br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>SELECT * FROM Fibonacci( 10 );</code></div></div>
<br />
<span style="font-weight: bold;"><span style="font-size: large;">این کوئری خروجی زیر را تولید می‌کند:</span></span><br />
<br />
<blockquote><cite>نقل قول: </cite>n<br />
-------<br />
0<br />
1<br />
1<br />
2<br />
3<br />
5<br />
8<br />
13<br />
21<br />
34</blockquote>
<span style="font-weight: bold;"><span style="font-size: large;"><div style="text-align: justify;">تابع بازگشتی در SQL Server یک راه قدرتمند برای تولید دنباله‌های تکراری است. این تابع می‌تواند برای تولید دنباله‌های فیبوناچی، دنباله‌های هندسی، و سایر دنباله‌های تکراری استفاده شود.</div></span></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[حذف Delete در Sql Server با استفاده از join ها]]></title>
			<link>https://forum.a00b.com/showthread.php?tid=358</link>
			<pubDate>Sat, 02 Sep 2023 22:52:21 +0000</pubDate>
			<guid isPermaLink="false">https://forum.a00b.com/showthread.php?tid=358</guid>
			<description><![CDATA[<span style="font-size: large;"><span style="font-weight: bold;">مثال زیر نمونه‌ای از استفاده از Join برای حذف داده در SQL Server است:</span></span><br />
<br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>CREATE TABLE Table1 <br />
(<br />
&nbsp;&nbsp;&nbsp;&nbsp;ID INT PRIMARY KEY,<br />
&nbsp;&nbsp;&nbsp;&nbsp;Col1 VARCHAR(50)<br />
);<br />
<br />
CREATE TABLE Table2<br />
( <br />
&nbsp;&nbsp;&nbsp;&nbsp;ID INT PRIMARY KEY,<br />
&nbsp;&nbsp;&nbsp;&nbsp;Col2 VARCHAR(50)<br />
);<br />
<br />
INSERT INTO Table1 VALUES <br />
(1, 'Data1'),<br />
(2, 'Data2'),<br />
(3, 'Data3');<br />
<br />
INSERT INTO Table2 VALUES<br />
(1, 'DataA'), <br />
(2, 'DataB'),<br />
(3, 'DataC');<br />
<br />
DELETE T1<br />
FROM Table1 T1<br />
INNER JOIN Table2 T2 <br />
&nbsp;&nbsp;&nbsp;&nbsp;ON T1.ID = T2.ID<br />
WHERE T2.Col2 = 'DataB'</code></div></div>
<br />
<span style="font-weight: bold;"><span style="font-size: large;">در این مثال، یک INNER JOIN بین دو جدول Table1 و Table2 ایجاد می‌کنیم. سپس با استفاده از دستور DELETE و فیلتر کردن روی Col2 جدول Table2، رکورد مرتبط در جدول Table1 حذف می‌شود. <br />
در اینجا رکوردی که Col2 آن <span style="color: #C71585;">DataB</span> است، حذف خواهد شد.<br />
امیدوارم این مثال ساده بتواند نحوه استفاده از Join برای حذف داده در SQL Server را نشان دهد.</span></span>]]></description>
			<content:encoded><![CDATA[<span style="font-size: large;"><span style="font-weight: bold;">مثال زیر نمونه‌ای از استفاده از Join برای حذف داده در SQL Server است:</span></span><br />
<br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>CREATE TABLE Table1 <br />
(<br />
&nbsp;&nbsp;&nbsp;&nbsp;ID INT PRIMARY KEY,<br />
&nbsp;&nbsp;&nbsp;&nbsp;Col1 VARCHAR(50)<br />
);<br />
<br />
CREATE TABLE Table2<br />
( <br />
&nbsp;&nbsp;&nbsp;&nbsp;ID INT PRIMARY KEY,<br />
&nbsp;&nbsp;&nbsp;&nbsp;Col2 VARCHAR(50)<br />
);<br />
<br />
INSERT INTO Table1 VALUES <br />
(1, 'Data1'),<br />
(2, 'Data2'),<br />
(3, 'Data3');<br />
<br />
INSERT INTO Table2 VALUES<br />
(1, 'DataA'), <br />
(2, 'DataB'),<br />
(3, 'DataC');<br />
<br />
DELETE T1<br />
FROM Table1 T1<br />
INNER JOIN Table2 T2 <br />
&nbsp;&nbsp;&nbsp;&nbsp;ON T1.ID = T2.ID<br />
WHERE T2.Col2 = 'DataB'</code></div></div>
<br />
<span style="font-weight: bold;"><span style="font-size: large;">در این مثال، یک INNER JOIN بین دو جدول Table1 و Table2 ایجاد می‌کنیم. سپس با استفاده از دستور DELETE و فیلتر کردن روی Col2 جدول Table2، رکورد مرتبط در جدول Table1 حذف می‌شود. <br />
در اینجا رکوردی که Col2 آن <span style="color: #C71585;">DataB</span> است، حذف خواهد شد.<br />
امیدوارم این مثال ساده بتواند نحوه استفاده از Join برای حذف داده در SQL Server را نشان دهد.</span></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[لیست توابع function های SQL Server نسخه 2022 به همراه توضیحات]]></title>
			<link>https://forum.a00b.com/showthread.php?tid=357</link>
			<pubDate>Sat, 02 Sep 2023 22:48:11 +0000</pubDate>
			<guid isPermaLink="false">https://forum.a00b.com/showthread.php?tid=357</guid>
			<description><![CDATA[<div style="text-align: justify;"><span style="font-size: x-large;">در اینجا لیست یک سری از توابع پرکاربرد SQL Server در نسخه 2022 برای شما آورده شده است.</span></div>
<span style="font-size: large;"><ul>
<li>ASCII - برگرداندن مقدار ASCII کاراکتر</li>
<li>ATN2 - برگرداندن آرکتانژانت دو عدد</li>
<li>CAST - تبدیل نوع داده</li>
<li>COALESCE - برگرداندن اولین مقدار غیرNULL</li>
<li>CONVERT - تبدیل نوع داده با فرمت مشخص</li>
<li>COT - برگرداندن کوتانژانت عدد</li>
<li>CURRENT_TIMESTAMP - برگرداندن تاریخ و ساعت جاری</li>
<li>DEGREES - تبدیل رادیان به درجه</li>
<li>EXP - محاسبه e به توان عدد</li>
<li>FLOOR - گرد کردن به پایین‌ترین عدد صحیح</li>
<li>ISDATE - بررسی اینکه آیا رشته یک تاریخ است</li>
<li>ISNUMERIC - بررسی عدد بودن رشته</li>
<li>NCHAR - برگرداندن رشته با طول ثابت</li>
<li>PATINDEX - یافتن موقعیت الگو در رشته</li>
<li>PI - برگرداندن مقدار ثابت PI</li>
<li>RADIANS - تبدیل درجه به رادیان</li>
<li>RAND - ایجاد عدد تصادفی</li>
<li>ROUND - گرد کردن عدد با دقت مشخص</li>
<li>SESSION_USER - برگرداندن نام کاربر جاری</li>
<li>SIGN - برگرداندن علامت عدد</li>
<li>SIN - برگرداندن سینوس زاویه</li>
<li>SOUNDEX - برگرداندن تشابه صوتی رشته</li>
<li>SPACE - ایجاد فاصله خالی</li>
<li>STATS_DATE - تاریخ آخرین آماربرداری</li>
<li>STUFF - جایگزینی رشته در رشته</li>
<li>TYPE_ID - شناسه نوع داده</li>
<li>TYPE_NAME - نام نوع داده</li>
<li>UNICODE - مقدار Unicode کاراکتر</li>
<li>USER_NAME - نام کاربری</li>
<li>@@VERSION - نسخه SQL Server</li>
<li>CHOOSE - برگرداندن مقدار بر اساس اندیس</li>
<li>COSH - برگرداندن کسینوس هایپربولیک</li>
<li>COT - برگرداندن کوتانژانت</li>
<li>CURSOR_STATUS - وضعیت کرسر</li>
<li>DATEADD - افزودن بازه زمانی به تاریخ</li>
<li>DATEDIFF - محاسبه تفاضل دو تاریخ</li>
<li>ERROR_MESSAGE - پیام خطای آخرین خطا</li>
<li>FORMATMESSAGE - فرمت کردن پیام خطا</li>
<li>GETDATE - برگرداندن تاریخ و ساعت کنونی</li>
<li>GETUTCDATE - برگرداندن تاریخ و ساعت UTC کنونی</li>
<li>HAS_PERMS_BY_NAME - بررسی دسترسی کاربر</li>
<li>ISNULL - بررسی NULL بودن مقدار</li>
<li>ISNUMERIC - بررسی عدد بودن رشته</li>
<li>NEWID - ایجاد شناسه تصادفی GUID</li>
<li>PARSENAME - استخراج بخشی از مسیر</li>
<li>PERMISSION - بررسی دسترسی کاربر</li>
<li>QUOTENAME - قرار دادن نام در گیومه</li>
<li>REPLICATE - تکرار رشته</li>
<li>ABS - برگرداندن مقدار مطلق یک عدد</li>
<li>ACOS - محاسبه آرکوسینوس زاویه</li>
<li>ASIN - محاسبه آرکسینوس زاویه</li>
<li>ATAN - محاسبه آرکتانژانت زاویه</li>
<li>AVG - محاسبه میانگین مقادیر ستون</li>
<li>CEILING - گرد کردن به بالاترین عدد صحیح</li>
<li>CHAR - تبدیل به کاراکتر</li>
<li>CONCAT - ادغام رشته ها</li>
<li>COS - محاسبه کسینوس زاویه</li>
<li>COUNT - شمارش تعداد رکوردها</li>
<li>DATEADD - افزودن بازه زمانی به تاریخ</li>
<li>DATEDIFF - محاسبه تفاضل دو تاریخ</li>
<li>FORMAT - فرمت بندی رشته</li>
<li>ISNULL - بررسی NULL بودن مقدار</li>
<li>LEN - بازگرداندن طول رشته</li>
<li>MAX - بازگرداندن بزرگترین مقدار</li>
<li>MIN - بازگرداندن کوچکترین مقدار</li>
<li>POWER - توان رسانی یک عدد</li>
<li>ROUND - گرد کردن عدد</li>
<li>RTRIM - حذف فاصله های انتهای رشته</li>
<li>SIGN - بازگرداندن علامت عدد</li>
<li>SQRT - محاسبه ریشه دوم</li>
<li>SQUARE - محاسبه مربع عدد</li>
<li>STDEV - محاسبه انحراف معیار جامعه</li>
<li>STR - تبدیل عدد به رشته</li>
<li>STUFF - جایگزینی بخشی از رشته</li>
<li>SUBSTRING - استخراج بخشی از رشته</li>
<li>SUM - مجموع مقادیر ستون</li>
<li>TAN - محاسبه تانژانت زاویه</li>
<li>TRIM - حذف فضای خالی اضافی</li>
<li>UPPER - تبدیل به حروف بزرگ</li>
<li>VAR - محاسبه واریانس جامعه</li>
<li>YEAR - استخراج بخش سال از تاریخ</li>
<li>ROW_NUMBER - شماره دهی به رکوردها</li>
<li>LAG - دسترسی به رکورد قبلی</li>
<li>LEAD - دسترسی به رکورد بعدی</li>
<li>NTILE - تقسیم بندی رکوردها به گروه‌های مساوی</li>
<li>CUME_DIST - محاسبه توزیع تجمعی رکوردها</li>
<li>FIRST_VALUE - مقدار اولین رکورد در هر گروه</li>
<li>LAST_VALUE - مقدار آخرین رکورد در هر گروه</li>
<li>LAG - دسترسی به رکورد قبلی در پنجره</li>
<li>LEAD - دسترسی به رکورد بعدی در پنجره</li>
<li>PERCENT_RANK - محاسبه رتبه درصدی رکورد<br />
<br />
</li></ul>
</span>]]></description>
			<content:encoded><![CDATA[<div style="text-align: justify;"><span style="font-size: x-large;">در اینجا لیست یک سری از توابع پرکاربرد SQL Server در نسخه 2022 برای شما آورده شده است.</span></div>
<span style="font-size: large;"><ul>
<li>ASCII - برگرداندن مقدار ASCII کاراکتر</li>
<li>ATN2 - برگرداندن آرکتانژانت دو عدد</li>
<li>CAST - تبدیل نوع داده</li>
<li>COALESCE - برگرداندن اولین مقدار غیرNULL</li>
<li>CONVERT - تبدیل نوع داده با فرمت مشخص</li>
<li>COT - برگرداندن کوتانژانت عدد</li>
<li>CURRENT_TIMESTAMP - برگرداندن تاریخ و ساعت جاری</li>
<li>DEGREES - تبدیل رادیان به درجه</li>
<li>EXP - محاسبه e به توان عدد</li>
<li>FLOOR - گرد کردن به پایین‌ترین عدد صحیح</li>
<li>ISDATE - بررسی اینکه آیا رشته یک تاریخ است</li>
<li>ISNUMERIC - بررسی عدد بودن رشته</li>
<li>NCHAR - برگرداندن رشته با طول ثابت</li>
<li>PATINDEX - یافتن موقعیت الگو در رشته</li>
<li>PI - برگرداندن مقدار ثابت PI</li>
<li>RADIANS - تبدیل درجه به رادیان</li>
<li>RAND - ایجاد عدد تصادفی</li>
<li>ROUND - گرد کردن عدد با دقت مشخص</li>
<li>SESSION_USER - برگرداندن نام کاربر جاری</li>
<li>SIGN - برگرداندن علامت عدد</li>
<li>SIN - برگرداندن سینوس زاویه</li>
<li>SOUNDEX - برگرداندن تشابه صوتی رشته</li>
<li>SPACE - ایجاد فاصله خالی</li>
<li>STATS_DATE - تاریخ آخرین آماربرداری</li>
<li>STUFF - جایگزینی رشته در رشته</li>
<li>TYPE_ID - شناسه نوع داده</li>
<li>TYPE_NAME - نام نوع داده</li>
<li>UNICODE - مقدار Unicode کاراکتر</li>
<li>USER_NAME - نام کاربری</li>
<li>@@VERSION - نسخه SQL Server</li>
<li>CHOOSE - برگرداندن مقدار بر اساس اندیس</li>
<li>COSH - برگرداندن کسینوس هایپربولیک</li>
<li>COT - برگرداندن کوتانژانت</li>
<li>CURSOR_STATUS - وضعیت کرسر</li>
<li>DATEADD - افزودن بازه زمانی به تاریخ</li>
<li>DATEDIFF - محاسبه تفاضل دو تاریخ</li>
<li>ERROR_MESSAGE - پیام خطای آخرین خطا</li>
<li>FORMATMESSAGE - فرمت کردن پیام خطا</li>
<li>GETDATE - برگرداندن تاریخ و ساعت کنونی</li>
<li>GETUTCDATE - برگرداندن تاریخ و ساعت UTC کنونی</li>
<li>HAS_PERMS_BY_NAME - بررسی دسترسی کاربر</li>
<li>ISNULL - بررسی NULL بودن مقدار</li>
<li>ISNUMERIC - بررسی عدد بودن رشته</li>
<li>NEWID - ایجاد شناسه تصادفی GUID</li>
<li>PARSENAME - استخراج بخشی از مسیر</li>
<li>PERMISSION - بررسی دسترسی کاربر</li>
<li>QUOTENAME - قرار دادن نام در گیومه</li>
<li>REPLICATE - تکرار رشته</li>
<li>ABS - برگرداندن مقدار مطلق یک عدد</li>
<li>ACOS - محاسبه آرکوسینوس زاویه</li>
<li>ASIN - محاسبه آرکسینوس زاویه</li>
<li>ATAN - محاسبه آرکتانژانت زاویه</li>
<li>AVG - محاسبه میانگین مقادیر ستون</li>
<li>CEILING - گرد کردن به بالاترین عدد صحیح</li>
<li>CHAR - تبدیل به کاراکتر</li>
<li>CONCAT - ادغام رشته ها</li>
<li>COS - محاسبه کسینوس زاویه</li>
<li>COUNT - شمارش تعداد رکوردها</li>
<li>DATEADD - افزودن بازه زمانی به تاریخ</li>
<li>DATEDIFF - محاسبه تفاضل دو تاریخ</li>
<li>FORMAT - فرمت بندی رشته</li>
<li>ISNULL - بررسی NULL بودن مقدار</li>
<li>LEN - بازگرداندن طول رشته</li>
<li>MAX - بازگرداندن بزرگترین مقدار</li>
<li>MIN - بازگرداندن کوچکترین مقدار</li>
<li>POWER - توان رسانی یک عدد</li>
<li>ROUND - گرد کردن عدد</li>
<li>RTRIM - حذف فاصله های انتهای رشته</li>
<li>SIGN - بازگرداندن علامت عدد</li>
<li>SQRT - محاسبه ریشه دوم</li>
<li>SQUARE - محاسبه مربع عدد</li>
<li>STDEV - محاسبه انحراف معیار جامعه</li>
<li>STR - تبدیل عدد به رشته</li>
<li>STUFF - جایگزینی بخشی از رشته</li>
<li>SUBSTRING - استخراج بخشی از رشته</li>
<li>SUM - مجموع مقادیر ستون</li>
<li>TAN - محاسبه تانژانت زاویه</li>
<li>TRIM - حذف فضای خالی اضافی</li>
<li>UPPER - تبدیل به حروف بزرگ</li>
<li>VAR - محاسبه واریانس جامعه</li>
<li>YEAR - استخراج بخش سال از تاریخ</li>
<li>ROW_NUMBER - شماره دهی به رکوردها</li>
<li>LAG - دسترسی به رکورد قبلی</li>
<li>LEAD - دسترسی به رکورد بعدی</li>
<li>NTILE - تقسیم بندی رکوردها به گروه‌های مساوی</li>
<li>CUME_DIST - محاسبه توزیع تجمعی رکوردها</li>
<li>FIRST_VALUE - مقدار اولین رکورد در هر گروه</li>
<li>LAST_VALUE - مقدار آخرین رکورد در هر گروه</li>
<li>LAG - دسترسی به رکورد قبلی در پنجره</li>
<li>LEAD - دسترسی به رکورد بعدی در پنجره</li>
<li>PERCENT_RANK - محاسبه رتبه درصدی رکورد<br />
<br />
</li></ul>
</span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[مزایا و معایب Stored Procedure]]></title>
			<link>https://forum.a00b.com/showthread.php?tid=356</link>
			<pubDate>Tue, 15 Aug 2023 17:59:00 +0000</pubDate>
			<guid isPermaLink="false">https://forum.a00b.com/showthread.php?tid=356</guid>
			<description><![CDATA[<span style="font-size: large;"><div style="text-align: justify;"><span style="font-weight: bold;">استفاده از Stored Procedure چیست؟</span><br />
Stored Procedure (رویه‌های ذخیره‌شده)، یک نوع بلوک کد SQL است که در دیتابیس ذخیره می‌شود و می‌تواند با اجرای آن‌ها عملیات‌های مختلفی را انجام دهد. این بلاک‌های کد می‌توانند شامل کوئری‌ها، منطق کاربری، تراکنش‌ها و پردازش‌های پیچیده‌تری باشند.<br />
<br />
<span style="font-weight: bold;">مزایا و معایب Stored Procedure:</span><br />
<span style="font-weight: bold;">مزایا:</span><br />
<span style="font-weight: bold;">عملکرد بهتر:</span> Stored procedure می‌تواند در بهبود عملکرد دیتابیس و کوئری‌ها کمک کند. اجرای مکرر کوئری‌ها با استفاده از stored procedure می‌تواند سرعت را افزایش دهد.<br />
<span style="font-weight: bold;">جداسازی منطق:</span> از طریق استفاده از stored procedure، می‌توان منطق کاربری را از برنامه جدا کرد. این موضوع منجر به دسترسی کمتر به دیتابیس از سمت برنامه می‌شود و امنیت را افزایش می‌دهد.<br />
<span style="font-weight: bold;">قابلیت تست:</span> Stored procedure قابلیت تست مستقل را دارند. شما می‌توانید آن‌ها را به صورت جداگانه تست کنید.<br />
<span style="font-weight: bold;">معایب:</span><br />
<span style="font-weight: bold;">پیچیدگی:</span> تعیین چه زمانی باید از stored procedure استفاده کنید یا کوئری معمولی، ممکن است پیچیده باشد. موارد مختلفی می‌توانند در انتخاب نقش داشته باشند.<br />
<span style="font-weight: bold;">نیاز به تغییر در دیتابیس:</span> برای تغییرات در stored procedure باید به دیتابیس دسترسی داشته باشید. این موضوع می‌تواند در مواردی مشکل‌ساز باشد.<br />
<span style="font-weight: bold;">همکاری تیمی: </span>برخی موارد ممکن است بر اساس نیازها و توانایی‌های تیم، تصمیم‌گیری را دشوار کنند.<br />
<span style="font-weight: bold;">انتخاب بین Stored Procedure و کوئری معمولی:</span><br />
<span style="font-weight: bold;">انتخاب بین استفاده از stored procedure و کوئری معمولی وابسته به موارد زیر است:</span><br />
<span style="font-weight: bold;">نوع پروژه:</span> نوع پروژه (کوچک، بزرگ، وب، موبایل) ممکن است نقشی در انتخاب داشته باشد.<br />
<span style="font-weight: bold;">نیاز به بهبود عملکرد:</span> اگر پروژه نیاز به بهبود عملکرد دارد، استفاده از stored procedure می‌تواند مفید باشد.<br />
<span style="font-weight: bold;">جدا کردن منطق:</span> اگر نیاز است منطق کاربری از دیتابیس جدا شود، stored procedure می‌تواند مناسب باشد.<br />
<span style="font-weight: bold;">میزان پیچیدگی کوئری‌ها:</span> اگر کوئری‌ها پیچیده هستند و نیاز به پردازش‌های محاسباتی دارند، stored procedure می‌تواند مفید باشد.<br />
به طور خلاصه، استفاده از stored procedure یا کوئری معمولی وابسته به موارد و نیازهای پروژه خاص شماست. هر دو روش می‌توانند مزایا و معایب خود را داشته باشند، و انتخاب به دقت باید صورت گیرد. اطلاعات و تجربه تیم فنی نیز می‌تواند در این انتخاب کمک کننده باشد.</div></span>]]></description>
			<content:encoded><![CDATA[<span style="font-size: large;"><div style="text-align: justify;"><span style="font-weight: bold;">استفاده از Stored Procedure چیست؟</span><br />
Stored Procedure (رویه‌های ذخیره‌شده)، یک نوع بلوک کد SQL است که در دیتابیس ذخیره می‌شود و می‌تواند با اجرای آن‌ها عملیات‌های مختلفی را انجام دهد. این بلاک‌های کد می‌توانند شامل کوئری‌ها، منطق کاربری، تراکنش‌ها و پردازش‌های پیچیده‌تری باشند.<br />
<br />
<span style="font-weight: bold;">مزایا و معایب Stored Procedure:</span><br />
<span style="font-weight: bold;">مزایا:</span><br />
<span style="font-weight: bold;">عملکرد بهتر:</span> Stored procedure می‌تواند در بهبود عملکرد دیتابیس و کوئری‌ها کمک کند. اجرای مکرر کوئری‌ها با استفاده از stored procedure می‌تواند سرعت را افزایش دهد.<br />
<span style="font-weight: bold;">جداسازی منطق:</span> از طریق استفاده از stored procedure، می‌توان منطق کاربری را از برنامه جدا کرد. این موضوع منجر به دسترسی کمتر به دیتابیس از سمت برنامه می‌شود و امنیت را افزایش می‌دهد.<br />
<span style="font-weight: bold;">قابلیت تست:</span> Stored procedure قابلیت تست مستقل را دارند. شما می‌توانید آن‌ها را به صورت جداگانه تست کنید.<br />
<span style="font-weight: bold;">معایب:</span><br />
<span style="font-weight: bold;">پیچیدگی:</span> تعیین چه زمانی باید از stored procedure استفاده کنید یا کوئری معمولی، ممکن است پیچیده باشد. موارد مختلفی می‌توانند در انتخاب نقش داشته باشند.<br />
<span style="font-weight: bold;">نیاز به تغییر در دیتابیس:</span> برای تغییرات در stored procedure باید به دیتابیس دسترسی داشته باشید. این موضوع می‌تواند در مواردی مشکل‌ساز باشد.<br />
<span style="font-weight: bold;">همکاری تیمی: </span>برخی موارد ممکن است بر اساس نیازها و توانایی‌های تیم، تصمیم‌گیری را دشوار کنند.<br />
<span style="font-weight: bold;">انتخاب بین Stored Procedure و کوئری معمولی:</span><br />
<span style="font-weight: bold;">انتخاب بین استفاده از stored procedure و کوئری معمولی وابسته به موارد زیر است:</span><br />
<span style="font-weight: bold;">نوع پروژه:</span> نوع پروژه (کوچک، بزرگ، وب، موبایل) ممکن است نقشی در انتخاب داشته باشد.<br />
<span style="font-weight: bold;">نیاز به بهبود عملکرد:</span> اگر پروژه نیاز به بهبود عملکرد دارد، استفاده از stored procedure می‌تواند مفید باشد.<br />
<span style="font-weight: bold;">جدا کردن منطق:</span> اگر نیاز است منطق کاربری از دیتابیس جدا شود، stored procedure می‌تواند مناسب باشد.<br />
<span style="font-weight: bold;">میزان پیچیدگی کوئری‌ها:</span> اگر کوئری‌ها پیچیده هستند و نیاز به پردازش‌های محاسباتی دارند، stored procedure می‌تواند مفید باشد.<br />
به طور خلاصه، استفاده از stored procedure یا کوئری معمولی وابسته به موارد و نیازهای پروژه خاص شماست. هر دو روش می‌توانند مزایا و معایب خود را داشته باشند، و انتخاب به دقت باید صورت گیرد. اطلاعات و تجربه تیم فنی نیز می‌تواند در این انتخاب کمک کننده باشد.</div></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[کوئری بدست آوردن آی پی ها و یوزرهای متصل به SQL Server]]></title>
			<link>https://forum.a00b.com/showthread.php?tid=348</link>
			<pubDate>Sun, 04 Oct 2020 07:22:40 +0000</pubDate>
			<guid isPermaLink="false">https://forum.a00b.com/showthread.php?tid=348</guid>
			<description><![CDATA[<span style="font-size: large;"><span style="font-weight: bold;"><span style="color: #800000;">چگونه اطلاعات افراد متصل به پایگاه داده SQL Server را بدست آوریم</span></span><br />
گاهی اوقات لازم است که ببینید در حال حاضر چه آی پی ها و چه کاربرانی و از طریق چه پروتکلی به پایگاه داده متصل هستند.  با استفاده از پرس و جوی زیر میتوانید اطلاعات پایه اتصال های فعلی SQL سرور خود را برگردانید و مشاهده کنید.<br />
<br />
</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>SELECT session_id, connect_time, net_transport, auth_scheme, client_net_address <br />
FROM sys.dm_exec_connections</code></div></div>
<br />
<div style="text-align: center;">
<img src="http://forum.a00b.com/upload/Uploads/6373740551730111370dm_exec_connections.JPG" border="0" alt="[تصویر:  6373740551730111370dm_exec_connections.JPG]" /><br />
</div>]]></description>
			<content:encoded><![CDATA[<span style="font-size: large;"><span style="font-weight: bold;"><span style="color: #800000;">چگونه اطلاعات افراد متصل به پایگاه داده SQL Server را بدست آوریم</span></span><br />
گاهی اوقات لازم است که ببینید در حال حاضر چه آی پی ها و چه کاربرانی و از طریق چه پروتکلی به پایگاه داده متصل هستند.  با استفاده از پرس و جوی زیر میتوانید اطلاعات پایه اتصال های فعلی SQL سرور خود را برگردانید و مشاهده کنید.<br />
<br />
</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>SELECT session_id, connect_time, net_transport, auth_scheme, client_net_address <br />
FROM sys.dm_exec_connections</code></div></div>
<br />
<div style="text-align: center;">
<img src="http://forum.a00b.com/upload/Uploads/6373740551730111370dm_exec_connections.JPG" border="0" alt="[تصویر:  6373740551730111370dm_exec_connections.JPG]" /><br />
</div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[آموزش نحوه مقابله با SQL Injection یا حملات تزریق SQL Server]]></title>
			<link>https://forum.a00b.com/showthread.php?tid=331</link>
			<pubDate>Mon, 10 Feb 2020 21:03:50 +0000</pubDate>
			<guid isPermaLink="false">https://forum.a00b.com/showthread.php?tid=331</guid>
			<description><![CDATA[<span style="font-size: large;"><span style="font-weight: bold;"><a href="http://www.a00b.com/FckFiles/file/PDF/SQL_www_a00b_com.pdf" target="_blank">آموزش نحوه مقابله با SQL Injection یا حملات تزریق SQL Server فایل PDF تعداد  112 صفحه </a></span></span>]]></description>
			<content:encoded><![CDATA[<span style="font-size: large;"><span style="font-weight: bold;"><a href="http://www.a00b.com/FckFiles/file/PDF/SQL_www_a00b_com.pdf" target="_blank">آموزش نحوه مقابله با SQL Injection یا حملات تزریق SQL Server فایل PDF تعداد  112 صفحه </a></span></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[دانلود فایل آموزشی PostgreSQL به صورت PDF 150 صفحه]]></title>
			<link>https://forum.a00b.com/showthread.php?tid=330</link>
			<pubDate>Mon, 10 Feb 2020 20:47:49 +0000</pubDate>
			<guid isPermaLink="false">https://forum.a00b.com/showthread.php?tid=330</guid>
			<description><![CDATA[<span style="font-size: large;"><span style="font-weight: bold;"><a href="http://www.a00b.com/FckFiles/file/PDF/PostgreSQL155Pages_www_a00b_com.pdf" target="_blank">دانلود فایل آموزشی Postgre SQL به صورت PDF 150 صفحه</a></span></span>]]></description>
			<content:encoded><![CDATA[<span style="font-size: large;"><span style="font-weight: bold;"><a href="http://www.a00b.com/FckFiles/file/PDF/PostgreSQL155Pages_www_a00b_com.pdf" target="_blank">دانلود فایل آموزشی Postgre SQL به صورت PDF 150 صفحه</a></span></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[آپدیت یک جدول از جدول دیگر Update با Join در SQL Server]]></title>
			<link>https://forum.a00b.com/showthread.php?tid=202</link>
			<pubDate>Sat, 09 Feb 2019 08:45:49 +0000</pubDate>
			<guid isPermaLink="false">https://forum.a00b.com/showthread.php?tid=202</guid>
			<description><![CDATA[اجرای دستور Update با استفاده از Join ها در برنامه مدیریت پایگاه داده SQL  Server<br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>update f1 set f1.[RowName] = f2.[RowName]<br />
 from [DBTEST].[dbo].[Table1] f1 left join [DBTEST].[dbo].[Table2] f2 on f1.RodID = f2.RodID</code></div></div>
]]></description>
			<content:encoded><![CDATA[اجرای دستور Update با استفاده از Join ها در برنامه مدیریت پایگاه داده SQL  Server<br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>update f1 set f1.[RowName] = f2.[RowName]<br />
 from [DBTEST].[dbo].[Table1] f1 left join [DBTEST].[dbo].[Table2] f2 on f1.RodID = f2.RodID</code></div></div>
]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[اضافه کردن فیلد جدید به جدول پایگاه داده sql server با کد نویسی]]></title>
			<link>https://forum.a00b.com/showthread.php?tid=201</link>
			<pubDate>Mon, 24 Dec 2018 15:38:33 +0000</pubDate>
			<guid isPermaLink="false">https://forum.a00b.com/showthread.php?tid=201</guid>
			<description><![CDATA[<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>alter table tblCompany<br />
add CompanyPhones nvarchar(300) , CompanyMobiles nvarchar(300)</code></div></div>
]]></description>
			<content:encoded><![CDATA[<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>alter table tblCompany<br />
add CompanyPhones nvarchar(300) , CompanyMobiles nvarchar(300)</code></div></div>
]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[جدا کننده هزارگان سه تا سه تایی در اعداد sql server]]></title>
			<link>https://forum.a00b.com/showthread.php?tid=199</link>
			<pubDate>Fri, 23 Nov 2018 15:00:33 +0000</pubDate>
			<guid isPermaLink="false">https://forum.a00b.com/showthread.php?tid=199</guid>
			<description><![CDATA[<span style="font-size: medium;"><span style="font-weight: bold;">برای نمایش اعداد با جداکننده در sql server از روش زیر استفاده می شود.</span></span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>select replace(convert(varchar,convert(Money, TotalArea),1),'.00','') <br />
from table</code></div></div>
<br />
<span style="font-size: medium;">یا <br />
</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>SELECT CAST(CONVERT(varchar, CAST(123456 AS Money), 1) AS varchar)<br />
from table</code></div></div>
]]></description>
			<content:encoded><![CDATA[<span style="font-size: medium;"><span style="font-weight: bold;">برای نمایش اعداد با جداکننده در sql server از روش زیر استفاده می شود.</span></span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>select replace(convert(varchar,convert(Money, TotalArea),1),'.00','') <br />
from table</code></div></div>
<br />
<span style="font-size: medium;">یا <br />
</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>SELECT CAST(CONVERT(varchar, CAST(123456 AS Money), 1) AS varchar)<br />
from table</code></div></div>
]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[نحوه ایجاد open dialog box برای خواندن فایل در اکسس VBA]]></title>
			<link>https://forum.a00b.com/showthread.php?tid=197</link>
			<pubDate>Mon, 08 Oct 2018 02:45:42 +0000</pubDate>
			<guid isPermaLink="false">https://forum.a00b.com/showthread.php?tid=197</guid>
			<description><![CDATA[<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>Dim fDialog&nbsp;&nbsp;&nbsp;&nbsp;As Object<br />
&nbsp;&nbsp;&nbsp;&nbsp;Set fDialog = Application.FileDialog(3)<br />
&nbsp;&nbsp;&nbsp;&nbsp;Dim varFile As Variant<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;With fDialog<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .AllowMultiSelect = False<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Title = "Select File Location to Export XLSx :"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .InitialFileName = "jeffatwood.xlsx"<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;If .Show = True Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For Each varFile In .SelectedItems<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getFileName = varFile<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next<br />
&nbsp;&nbsp;&nbsp;&nbsp;End If<br />
End With</code></div></div>
]]></description>
			<content:encoded><![CDATA[<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>Dim fDialog&nbsp;&nbsp;&nbsp;&nbsp;As Object<br />
&nbsp;&nbsp;&nbsp;&nbsp;Set fDialog = Application.FileDialog(3)<br />
&nbsp;&nbsp;&nbsp;&nbsp;Dim varFile As Variant<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;With fDialog<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .AllowMultiSelect = False<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Title = "Select File Location to Export XLSx :"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .InitialFileName = "jeffatwood.xlsx"<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;If .Show = True Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For Each varFile In .SelectedItems<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getFileName = varFile<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next<br />
&nbsp;&nbsp;&nbsp;&nbsp;End If<br />
End With</code></div></div>
]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[نحوه بدست آوردن آخرین مقدار واقعی ID در فیلدهای اتونامبر]]></title>
			<link>https://forum.a00b.com/showthread.php?tid=181</link>
			<pubDate>Tue, 05 Jun 2018 09:58:09 +0000</pubDate>
			<guid isPermaLink="false">https://forum.a00b.com/showthread.php?tid=181</guid>
			<description><![CDATA[<span style="font-size: medium;">گاهی اوقات در پرس و جوهایی که مینویسیم لازم است که مقدار آخرین  فیلد اتونامبر را بدست آوریم. برخی از افراد از دستور <br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>Select Top(1)</code></div></div>
استفاده می کنند و مقدار بدست آمده را استفاده می کنند. این روش تنها زمانی پاسخگو می باشد که رکوردهای آخر قبلا حذف نشده باشند. مثلا اگر فیلد ID ما دارای آخرین عدد 4 باشد و قبلا ID های 5 و 6 از آن حذف شده باشند آخرین ID حقیقی همان عدد 6 خواهد بود. در صورتی که دستور فوق عدد 4 را نمایش می دهد. <br />
برای رفع این مشکل دستوری در SQL Server وجود دارد با عنوان <br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>IDENT_CURRENT('TABLE NAME')</code></div></div>
 که آخرین ID اتونامبر واقعی درج شده را بر می گرداند.<br />
شکل صحیح استفاده:<br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>SELECT IDENT_CURRENT('TBLBooks')</code></div></div>
خروجی یک عدد از نوع فیلد اتونامبر خواهد بود.<br />
به جای TABLE NAME هم می توانید نام جدول مورد نظر را وارد فرمائید.<br />
</span>]]></description>
			<content:encoded><![CDATA[<span style="font-size: medium;">گاهی اوقات در پرس و جوهایی که مینویسیم لازم است که مقدار آخرین  فیلد اتونامبر را بدست آوریم. برخی از افراد از دستور <br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>Select Top(1)</code></div></div>
استفاده می کنند و مقدار بدست آمده را استفاده می کنند. این روش تنها زمانی پاسخگو می باشد که رکوردهای آخر قبلا حذف نشده باشند. مثلا اگر فیلد ID ما دارای آخرین عدد 4 باشد و قبلا ID های 5 و 6 از آن حذف شده باشند آخرین ID حقیقی همان عدد 6 خواهد بود. در صورتی که دستور فوق عدد 4 را نمایش می دهد. <br />
برای رفع این مشکل دستوری در SQL Server وجود دارد با عنوان <br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>IDENT_CURRENT('TABLE NAME')</code></div></div>
 که آخرین ID اتونامبر واقعی درج شده را بر می گرداند.<br />
شکل صحیح استفاده:<br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>SELECT IDENT_CURRENT('TBLBooks')</code></div></div>
خروجی یک عدد از نوع فیلد اتونامبر خواهد بود.<br />
به جای TABLE NAME هم می توانید نام جدول مورد نظر را وارد فرمائید.<br />
</span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[ایجاد تریگر برای جلوگیری از حذف پایگاه داده]]></title>
			<link>https://forum.a00b.com/showthread.php?tid=178</link>
			<pubDate>Mon, 21 May 2018 18:23:09 +0000</pubDate>
			<guid isPermaLink="false">https://forum.a00b.com/showthread.php?tid=178</guid>
			<description><![CDATA[<span style="font-weight: bold;">چند روز پیش در محل کار یکی از دوستان که البته مدیر بنده هم هستند به اشتباه فایل پایگاه داده یکی از شرکت ها را پاک کردند. <img src="images/smilies/huh.gif" style="vertical-align: middle;" border="0" alt="Huh" title="Huh" /><img src="images/smilies/huh.gif" style="vertical-align: middle;" border="0" alt="Huh" title="Huh" /><img src="images/smilies/huh.gif" style="vertical-align: middle;" border="0" alt="Huh" title="Huh" /><br />
این مساله باعث شد که دردسر زیادی برای بازیابی دیتا و عملیات سینک و . . . متحمل شویم. <img src="images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt="Smile" title="Smile" /> بر آن شدیم که راه حلی با تریگر ارائه دهیم. <br />
با استفاده از این تریگر شما می توانید از حذف یک دیتابیس یا پایگاه داده جلوگیری نمایید. این تریگر یک تریگر دیتابیسی می باشد.<br />
</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>CREATE TRIGGER Prevent_DB_Drop <br />
ON ALL SERVER <br />
FOR DROP_DATABASE<br />
AS <br />
DECLARE @DatabaseName NVARCHAR(100),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@eventData XML<br />
<br />
--set the EVENTDATA() functions value to our xml so we can parse it<br />
SET @eventData = EVENTDATA()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
SELECT @DatabaseName&nbsp;&nbsp;&nbsp;&nbsp; = @eventData.value('(/EVENT_INSTANCE/DatabaseName)[1]'&nbsp;&nbsp;&nbsp;&nbsp; ,'varchar(128)' )<br />
IF @DatabaseName IN ('testDB')<br />
&nbsp;&nbsp;BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;PRINT 'You are not allowed to drop this Database.' <br />
&nbsp;&nbsp;&nbsp;&nbsp;ROLLBACK;<br />
&nbsp;&nbsp;END<br />
GO<br />
ENABLE TRIGGER [Prevent_DB_Drop] ON ALL SERVER</code></div></div>
<br />
<span style="font-weight: bold;">به جای عبارت<span style="color: #800000;"> testDB</span> می توانید عنوان پایگاه داده خود را وارد نمایید و به جای عبارت You are not allowed to drop this Database. هم می توانید پیام مورد نظر خود را وارد نمایید.</span>]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;">چند روز پیش در محل کار یکی از دوستان که البته مدیر بنده هم هستند به اشتباه فایل پایگاه داده یکی از شرکت ها را پاک کردند. <img src="images/smilies/huh.gif" style="vertical-align: middle;" border="0" alt="Huh" title="Huh" /><img src="images/smilies/huh.gif" style="vertical-align: middle;" border="0" alt="Huh" title="Huh" /><img src="images/smilies/huh.gif" style="vertical-align: middle;" border="0" alt="Huh" title="Huh" /><br />
این مساله باعث شد که دردسر زیادی برای بازیابی دیتا و عملیات سینک و . . . متحمل شویم. <img src="images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt="Smile" title="Smile" /> بر آن شدیم که راه حلی با تریگر ارائه دهیم. <br />
با استفاده از این تریگر شما می توانید از حذف یک دیتابیس یا پایگاه داده جلوگیری نمایید. این تریگر یک تریگر دیتابیسی می باشد.<br />
</span><br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>CREATE TRIGGER Prevent_DB_Drop <br />
ON ALL SERVER <br />
FOR DROP_DATABASE<br />
AS <br />
DECLARE @DatabaseName NVARCHAR(100),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@eventData XML<br />
<br />
--set the EVENTDATA() functions value to our xml so we can parse it<br />
SET @eventData = EVENTDATA()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
SELECT @DatabaseName&nbsp;&nbsp;&nbsp;&nbsp; = @eventData.value('(/EVENT_INSTANCE/DatabaseName)[1]'&nbsp;&nbsp;&nbsp;&nbsp; ,'varchar(128)' )<br />
IF @DatabaseName IN ('testDB')<br />
&nbsp;&nbsp;BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;PRINT 'You are not allowed to drop this Database.' <br />
&nbsp;&nbsp;&nbsp;&nbsp;ROLLBACK;<br />
&nbsp;&nbsp;END<br />
GO<br />
ENABLE TRIGGER [Prevent_DB_Drop] ON ALL SERVER</code></div></div>
<br />
<span style="font-weight: bold;">به جای عبارت<span style="color: #800000;"> testDB</span> می توانید عنوان پایگاه داده خود را وارد نمایید و به جای عبارت You are not allowed to drop this Database. هم می توانید پیام مورد نظر خود را وارد نمایید.</span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[جستجو در تمامی فیلدهای تمامی جدولهای پایگاه داده در SQL Server]]></title>
			<link>https://forum.a00b.com/showthread.php?tid=176</link>
			<pubDate>Fri, 30 Mar 2018 07:57:31 +0000</pubDate>
			<guid isPermaLink="false">https://forum.a00b.com/showthread.php?tid=176</guid>
			<description><![CDATA[<span style="font-weight: bold;"><span style="font-size: medium;">گاهی اوقات نیاز دارید که مقداری متنی یا عددی را در تمامی فیلدهای پایگاه داده و در تمامی جدولهای موجود جستجو نمایید. پرس و جوی زیر محل فیلد و جدول و مقدار یافته شده را به صورت LIKE Search در قالب یک جدول در خروجی نمایش می دهد.<br />
Search all tables, all columns for a specific value SQL Server<br />
برای این منظور می توانید از پرس و جوی زیر استفاده نمایید:</span></span><br />
<br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>DECLARE @SearchStr nvarchar(100)<br />
SET @SearchStr = 'متن جستجو را اینجا وارد نمایید'<br />
<br />
<br />
CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))<br />
 <br />
SET NOCOUNT ON<br />
 <br />
DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)<br />
SET&nbsp;&nbsp;@TableName = ''<br />
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')<br />
 <br />
WHILE @TableName IS NOT NULL<br />
 <br />
BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;SET @ColumnName = ''<br />
&nbsp;&nbsp;&nbsp;&nbsp;SET @TableName = <br />
&nbsp;&nbsp;&nbsp;&nbsp;(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;&nbsp;&nbsp;&nbsp; INFORMATION_SCHEMA.TABLES<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE_TYPE = 'BASE TABLE'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND&nbsp;&nbsp;&nbsp;&nbsp;QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) &gt; @TableName<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND&nbsp;&nbsp;&nbsp;&nbsp;OBJECTPROPERTY(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OBJECT_ID(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ), 'IsMSShipped'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ) = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;)<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SET @ColumnName =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT MIN(QUOTENAME(COLUMN_NAME))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;&nbsp;&nbsp;&nbsp; INFORMATION_SCHEMA.COLUMNS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE_SCHEMA&nbsp;&nbsp;&nbsp;&nbsp;= PARSENAME(@TableName, 2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND&nbsp;&nbsp;&nbsp;&nbsp;TABLE_NAME&nbsp;&nbsp;&nbsp;&nbsp;= PARSENAME(@TableName, 1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND&nbsp;&nbsp;&nbsp;&nbsp;DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar', 'int', 'decimal')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND&nbsp;&nbsp;&nbsp;&nbsp;QUOTENAME(COLUMN_NAME) &gt; @ColumnName<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF @ColumnName IS NOT NULL<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INSERT INTO #Results<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EXEC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630) FROM ' + @TableName + ' (NOLOCK) ' +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END<br />
&nbsp;&nbsp;&nbsp;&nbsp;END&nbsp;&nbsp; <br />
END<br />
 <br />
SELECT ColumnName, ColumnValue FROM #Results<br />
 <br />
DROP TABLE #Results</code></div></div>
]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;"><span style="font-size: medium;">گاهی اوقات نیاز دارید که مقداری متنی یا عددی را در تمامی فیلدهای پایگاه داده و در تمامی جدولهای موجود جستجو نمایید. پرس و جوی زیر محل فیلد و جدول و مقدار یافته شده را به صورت LIKE Search در قالب یک جدول در خروجی نمایش می دهد.<br />
Search all tables, all columns for a specific value SQL Server<br />
برای این منظور می توانید از پرس و جوی زیر استفاده نمایید:</span></span><br />
<br />
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>DECLARE @SearchStr nvarchar(100)<br />
SET @SearchStr = 'متن جستجو را اینجا وارد نمایید'<br />
<br />
<br />
CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))<br />
 <br />
SET NOCOUNT ON<br />
 <br />
DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)<br />
SET&nbsp;&nbsp;@TableName = ''<br />
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')<br />
 <br />
WHILE @TableName IS NOT NULL<br />
 <br />
BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;SET @ColumnName = ''<br />
&nbsp;&nbsp;&nbsp;&nbsp;SET @TableName = <br />
&nbsp;&nbsp;&nbsp;&nbsp;(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;&nbsp;&nbsp;&nbsp; INFORMATION_SCHEMA.TABLES<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE_TYPE = 'BASE TABLE'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND&nbsp;&nbsp;&nbsp;&nbsp;QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) &gt; @TableName<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND&nbsp;&nbsp;&nbsp;&nbsp;OBJECTPROPERTY(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OBJECT_ID(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ), 'IsMSShipped'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ) = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;)<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SET @ColumnName =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT MIN(QUOTENAME(COLUMN_NAME))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;&nbsp;&nbsp;&nbsp; INFORMATION_SCHEMA.COLUMNS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE_SCHEMA&nbsp;&nbsp;&nbsp;&nbsp;= PARSENAME(@TableName, 2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND&nbsp;&nbsp;&nbsp;&nbsp;TABLE_NAME&nbsp;&nbsp;&nbsp;&nbsp;= PARSENAME(@TableName, 1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND&nbsp;&nbsp;&nbsp;&nbsp;DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar', 'int', 'decimal')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND&nbsp;&nbsp;&nbsp;&nbsp;QUOTENAME(COLUMN_NAME) &gt; @ColumnName<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF @ColumnName IS NOT NULL<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INSERT INTO #Results<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EXEC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630) FROM ' + @TableName + ' (NOLOCK) ' +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END<br />
&nbsp;&nbsp;&nbsp;&nbsp;END&nbsp;&nbsp; <br />
END<br />
 <br />
SELECT ColumnName, ColumnValue FROM #Results<br />
 <br />
DROP TABLE #Results</code></div></div>
]]></content:encoded>
		</item>
	</channel>
</rss>