European Windows 2019 Hosting BLOG

BLOG about Windows 2019 Hosting and SQL 2019 Hosting - Dedicated to European Windows Hosting Customer

European SQL Server 2022 Hosting :: Types of Temporary Tables in SQL Server

clock June 13, 2023 08:52 by author Peter

SQL Server, one of the most widely used relational database management systems, is equipped with a variety of features and functionalities for efficiently managing complex data operations. Temporary tables stand out among these features as a potent data manipulation tool, allowing developers to store and manipulate temporary data within the context of a session or transaction. In this article, we will discuss temporary tables in SQL Server, their benefits, and their various varieties.

What are Transient Tables?

Temporary tables are database objects that are created and used intermittently during a session or transaction. Temporary tables, unlike permanent tables, are not retained in the database schema and are dropped automatically at the conclusion of the session or transaction in which they were created. This makes them ideal for handling intermediate results or temporary data that must be processed or manipulated before being discarded.

The benefits of temporary tables
Temporary tables enable us to segregate and isolate temporary data within a particular session or transaction, preventing interference with permanent tables or other sessions. This makes them particularly useful in multi-user environments with concurrently running sessions.

  • By storing intermediate results in temporary tables, it is possible to optimize complex queries and eliminate the need to repeatedly implement costly operations. Temporary tables can be indexed, which further improves query performance, particularly for large datasets.
  • Temporary tables can simplify complex queries by dividing them into smaller, more manageable sections. We can divide a complicated operation into multiple stages, store intermediate results in temporary tables, and construct the final output gradually. This simplifies the creation of queries and enhances the code's legibility and maintainability.
  • Local temporary tables, global temporary tables, and table variables are the three varieties of temporary tables supported by SQL Server. Each type has unique properties and application scenarios.

Temporary Local Tables
Local transient Tables in SQL Server are transient database objects that are created with a single hash sign (#) prefix and are only accessible within the session that generates them. These tables are dropped automatically when the session terminates or when they are no longer relevant. Local temporary tables allow for the storage and manipulation of session-specific transient data.

Here is an example of the creation and utilization of a local temporary table:

CREATE TABLE #TempEmployees (
    EmployeeID INT,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    HireDate DATE
);

-- Insert data into the temporary table
INSERT INTO #TempEmployees (EmployeeID, FirstName, LastName, HireDate)
VALUES (1, 'Peter', 'Scott', '2023-01-01');

INSERT INTO #TempEmployees (EmployeeID, FirstName, LastName, HireDate)
VALUES (2, 'Tom', 'Scott', '2023-02-01');

In the above example, we create a local temporary table named #TempEmployees with columns: EmployeeID, FirstName, LastName, and HireDate. The INSERT INTO statement allows us to insert rows into the temporary table. In this example, we insert two rows with employee details. We can perform various operations on the local temporary table, such as querying the data. After we have finished working with the local temporary table, it's considered good practice to drop it explicitly to free up system resources:
DROP TABLE #TempEmployees;

The DROP TABLE statement removes the temporary table from the database. Remember that local temporary tables are automatically dropped when the session ends or when they go out of scope. Therefore, you don't need to worry about explicitly dropping them at the end of the session, but it's a good practice to drop them explicitly to free up system resources.

It's important to note that local temporary tables are only accessible within the session that created them. If we try to access a local temporary table from a different session or transaction, we will encounter an error. This isolation ensures that temporary data is specific to the session and does not interfere with other sessions or permanent tables.

Here's an example of how to use local temporary tables:
-- Create a local temporary table
CREATE TABLE #TempEmployees (
    EmployeeID INT,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    HireDate DATE
);

-- Insert data into the temporary table
INSERT INTO #TempEmployees (EmployeeID, FirstName, LastName, HireDate)
VALUES (1, 'Peter', 'Scott', '2023-01-01'), (2, 'Tom', 'Scott', '2023-02-01'),
(3, 'Michael', 'Dawn', '2023-02-01'), (4, 'Lucas', 'Carty', '2023-02-01');

-- Query the temporary table
SELECT * FROM #TempEmployees;

-- Update data in the temporary table
UPDATE #TempEmployees
   SET FirstName = 'Leo'
 WHERE EmployeeID = 1;

-- Delete data from the temporary table
DELETE FROM #TempEmployees WHERE EmployeeID = 3;

-- Query the temporary table after modifications
SELECT * FROM #TempEmployees;

-- Drop the temporary table at the end of the session
DROP TABLE #TempEmployees;


Global Temporary Tables
Global Temporary Tables in SQL Server are temporary database objects created with a double hash sign (##) prefix. Unlike local temporary tables, global temporary tables can be accessed by multiple sessions. These tables are dropped when the last session referencing them is closed. Global temporary tables are useful when you need to share temporary data across multiple sessions or when you want the data to persist beyond the scope of a single session.

Here's an example that demonstrates the creation and usage of a global temporary table.
CREATE TABLE ##TempProducts (
    ProductID INT,
    ProductName VARCHAR(50),
    Price DECIMAL(10,2)
);

-- Insert data into the global temporary table
INSERT INTO ##TempProducts (ProductID, ProductName, Price)
VALUES (1, 'Product A', 10.99);

INSERT INTO ##TempProducts (ProductID, ProductName, Price)
VALUES (2, 'Product B', 19.69);


In the above example, we create a global temporary table named ##TempProducts with the following columns: ProductID, ProductName, and Price. The INSERT INTO statement allows us to insert rows into the global temporary table. Similar to local temporary tables, we can perform various operations on the global temporary table, such as querying the data, and it's considered good practice to explicitly drop the global temporary table once we have finished working with it.
DROP TABLE ##TempProducts;

The DROP TABLE statement removes the global temporary table from the database.

Unlike local temporary tables, global temporary tables are accessible by multiple sessions. Each session referencing the global temporary table can perform operations like inserting, updating, or querying data. However, once the last session that references the global temporary table is closed, the table is automatically dropped.

Global temporary tables are beneficial when we need to share temporary data across multiple sessions or when you want the data to persist beyond the scope of a single session. They can be used for scenarios where temporary data needs to be shared or synchronized across different sessions.

Here's an example of how to use global temporary tables:
-- Create a global temporary table
CREATE TABLE ##TempProducts (
    ProductID INT,
    ProductName VARCHAR(50),
    Price DECIMAL(10,2)
);

-- Insert data into the temporary table
INSERT INTO ##TempProducts (ProductID, ProductName, Price)
VALUES (1, 'Product A', 10.99), (2, 'Product B', 19.69),
(3, 'Product C', 13.99), (44, 'Product D', 29.99);

-- Query the temporary table
SELECT * FROM ##TempProducts;

-- Update data in the temporary table
UPDATE ##TempProducts
   SET ProductName = 'Product AA'
 WHERE ProductID = 1;

-- Delete data from the temporary table
DELETE FROM ##TempProducts WHERE ProductID = 3;

-- Query the temporary table after modifications
SELECT * FROM ##TempProducts;

-- Drop the temporary table explicitly
DROP TABLE ##TempProducts;

Table Variables
Table variables in SQL Server are variables that can hold a set of data similar to a regular table. They are declared using the DECLARE statement and have a similar syntax to regular tables. Table variables exist only in memory and have a limited scope within a batch, stored procedure, or function. They are automatically dropped when the batch, procedure, or function finishes execution. Table variables are commonly used for storing and manipulating small result sets or as parameters in user-defined functions.

Here's an example that demonstrates the declaration and usage of a table variable.
DECLARE @TempTable TABLE (
    EmployeeID INT,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    HireDate DATE
);

-- Insert data into the table variable
INSERT INTO @TempTable (EmployeeID, FirstName, LastName, HireDate)
VALUES (1, 'Peter', 'Scott', '2023-01-01');

INSERT INTO @TempTable (EmployeeID, FirstName, LastName, HireDate)
VALUES (2, 'Tom', 'Scott', '2023-02-01');


In the above example, we declare a table variable named @TempTable with columns: EmployeeID, FirstName, LastName, and HireDate. Table Variables automatically drop when the batch, procedure, or function finishes execution. We don't need to explicitly drop it.

Table variables have certain limitations compared to temporary tables. They cannot be indexed, have constraints, or participate in transactions. They are typically used for smaller result sets or within a limited scope where the data volume is not significant. Table variables are often used within stored procedures or functions when there is a need to store intermediate results or perform calculations on a small data set.

Here's an example of how to use table variables.
-- Declare a table variable
DECLARE @TempTable TABLE (
    EmployeeID INT,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    HireDate DATE
);

-- Insert data into the table variable
INSERT INTO @TempTable (EmployeeID, FirstName, LastName, HireDate)
VALUES (1, 'Peter', 'Scott', '2023-01-01'), (2, 'Tom', 'Scott', '2023-02-01'),
(3, 'Lucas', 'Carty', '2023-02-01');

-- Query the table variable
SELECT * FROM @TempTable;

-- Update data in the table variable
UPDATE @TempTable
   SET FirstName = 'Leo'
 WHERE EmployeeID = 1;

-- Delete data from the table variable
DELETE FROM @TempTable WHERE EmployeeID = 3;

-- Query the table variable after modifications
SELECT * FROM @TempTable;

Conclusion
Temporary tables in SQL Server provide a flexible and efficient way to handle temporary data within a session or transaction. They offer benefits such as data segregation, performance optimization, and simplified query development. Choosing the appropriate type of temporary table depends on the specific requirements of your application. If we need temporary data that are session-specific, local temporary tables are suitable. If we require temporary data that can be shared across sessions or that persists beyond a single session, global temporary tables can fulfill those needs. Table variables are lightweight for small result sets or within a limited scope.

HostForLIFEASP.NET SQL Server 2022 Hosting

 



European SQL Server 2022 Hosting :: SQL Server Security Best Practices

clock June 7, 2023 12:44 by author Peter

SQL Server is a powerful and popular database management system used by organizations of all sizes to store, manage, and retrieve data. As with any database system, security is paramount to ensure the confidentiality, integrity, and availability of stored data. This article will discuss some best practices for SQL Server security and examples.

Use strong passwords

Using strong passwords is one of the most basic but crucial security practices. A strong password should be at least 8 characters long and should include a mix of upper and lower case letters, numbers, and symbols. Enforcing password expiration policies and preventing users from reusing old passwords is also good.

Example

CREATE LOGIN [username] WITH PASSWORD=N'P@ssw0rd', CHECK_EXPIRATION=ON, CHECK_POLICY=ON

Use the least privileged access

The principle of least privilege means that users should only have the minimum level of access required to perform their job functions. This helps to reduce the risk of unauthorized access or accidental data modification. It is important to regularly review and audit user permissions to ensure they are appropriate.

Example

GRANT SELECT, INSERT, UPDATE, DELETE ON [dbo].[Table] TO [username]

Use encryption

Encryption can help to protect sensitive data from unauthorized access. SQL Server supports both symmetric and asymmetric encryption. Symmetric encryption uses the same key for encryption and decryption, while asymmetric encryption uses a public key for encryption and a private key for decryption.

Example

CREATE SYMMETRIC KEY [MyKey] WITH ALGORITHM = AES_256 ENCRYPTION BY PASSWORD = 'MyPassword';
OPEN SYMMETRIC KEY [MyKey] DECRYPTION BY PASSWORD = 'MyPassword';
UPDATE [dbo].[Table] SET [SensitiveColumn] = ENCRYPTBYKEY(KEY_GUID('MyKey'), [SensitiveColumn]);
SELECT [SensitiveColumn] = CONVERT(VARCHAR(MAX), DECRYPTBYKEY([SensitiveColumn])) FROM [dbo].[Table];

Implement auditing and logging

Auditing and logging can help to detect and investigate security incidents. SQL Server provides several mechanisms for auditing and logging, including SQL Server Audit, SQL Server Profiler, and the SQL Server Error Log.

Example

CREATE SERVER AUDIT [MyAudit] TO FILE (FILEPATH = N'C:\Audit\MyAudit') WITH (ON_FAILURE = CONTINUE);
ALTER SERVER AUDIT [MyAudit] WITH (STATE = ON);
CREATE SERVER AUDIT SPECIFICATION [MyAuditSpec] FOR SERVER AUDIT [MyAudit] ADD (SERVER_PERMISSION_CHANGE_GROUP);
ALTER SERVER AUDIT SPECIFICATION [MyAuditSpec] WITH (STATE = ON);

Keep SQL Server updated

SQL Server is regularly updated with security patches and bug fixes. It is important to keep SQL Server up to date to protect it against the latest security vulnerabilities.

Example

SELECT @@VERSION;
-- Check for the latest SQL Server version and patches on Microsoft's website

More...

Do not share passwords: Many SQL DBAs and developers store their passwords in plain text or in documents that can be stolen. Also, implement strict security policies and guidelines for storing and changing passwords. 

Use firewalls to restrict access to the SQL Server instance and limit access to only authorized users and systems. Many developers and DBAs work remotely these days, and remote access to a database is quite normal. However, if proper policies are not placed, this could lead to data hacks.

Use strong authentication mechanisms: Use strong authentication mechanisms, such as multi-factor authentication, to ensure that only authorized users are able to access the SQL Server instance.

Disable unnecessary features: Disable any unnecessary features or services to reduce the attack surface of the SQL Server instance.

Implement security policies:

Implement security policies and procedures to ensure all users know their responsibilities and obligations when using SQL Server. This can help ensure that security is maintained consistently across the organization.

a. Define access controls: Clearly define and document access controls for SQL Server, including who has permission to perform specific actions, such as creating, modifying, or deleting databases, tables, or users. Limit access to only those who require it for their job responsibilities.

b. Enforce password policies: Establish and enforce password policies, such as minimum password length, password complexity requirements, and password expiration policies, to ensure that strong passwords are used and regularly updated.

c. Enable auditing and monitoring: Implement auditing and monitoring mechanisms to track and log activity on the SQL Server instance. This includes monitoring for failed login attempts, privilege changes, and other suspicious activities and reviewing logs regularly for potential security issues.

d. Regularly review user permissions: Regularly review and update user permissions to ensure that users have only the necessary permissions to perform their job responsibilities. Remove unnecessary permissions promptly to reduce the risk of unauthorized access.

e. Regularly review security configurations: Regularly review and update security configurations for SQL Server, such as network configurations, firewall rules, and encryption settings, to ensure that they are aligned with industry best practices and organizational security policies.

f. Educate users: Provide regular training and education to all users who interact with SQL Server, including database administrators, developers, and end users, on security best practices, such as password hygiene, safe data handling, and potential security risks to raise awareness and promote responsible use.

g. Regularly apply patches and updates: Keep SQL Server updated with the latest patches and updates from the vendor to address known security vulnerabilities and protect against potential attacks.

h. Have a disaster recovery plan: Develop and implement a disaster recovery plan for SQL Server, including regular data backups, offsite storage, and recovery procedures, to ensure that data can be restored in the event of a security breach or other unforeseen event.

i. Conduct security audits: Regularly conduct security audits of the SQL Server environment to identify potential security weaknesses and vulnerabilities and take appropriate measures to address them promptly.

By implementing security policies and procedures, regularly reviewing and updating them, and providing education and training to users, you can establish a culture of security around SQL Server and reduce the risk of security breaches and data compromises.

Conclusion

These are just a few of the many SQL server security best practices. By implementing these practices and staying vigilant, organizations can help to protect their valuable data from unauthorized access and maintain the integrity and availability of their SQL Server systems.

HostForLIFEASP.NET SQL Server 2022 Hosting

 



European SQL Server 2022 Hosting :: Installing SQL Server 2022

clock May 22, 2023 07:21 by author Peter

In this article, I will detail the installation process for SQL Server 2022 Developer Edition and SQL Server Management Studio (SSMS). The most recent version of SQL Server is 2022, and the most recent iteration of SQL Server Management Studio (SSMS) was on March 13, 2023. Developer Edition is complimentary.

Microsoft SQL Server Editions

There are four distinct edition variants available for SQL Server 2022.
    Enterprise - This edition has more features than any other
        It is the premium edition.
        Production utilization
        License cost
    Standard – Use in production
        License cost
        Enterprise Express – Free Software/Free to Download and Install has more features.
        It has a size limit of 10 GB and is only used for minor applications.
    Developer - Free to obtain and install software
        Developer is identical to Enterprise, but for non-production use.
        It is utilized to learn, construct, and test.

I'm utilizing SQL Server 2022 Developer Edition because it's a free download and installation.
How can SQL Server 2022 Developer Edition be installed?

Step 1
Downloading SQL Server 2022 from https://www.microsoft.com/en-in/sql-server/sql-server-downloads is required for installation.

Step 2
Click the "Download" button to acquire the executable file for SQL Server 2022.

Step 3
Open the system's download path and locate the executable file. SQL2022-SSEI-Dev.exe


Step 4
Double-click the SQL2022-SSEI-Dev.exe file to begin the installation.

Step 5
After a double-click, the system will request permission: "Do you wish to permit the following to make changes to this computer? To continue installing SQL Server 2022, click agree. Or select "Yes" when prompted about security.

Step 6
Choose the Basic installation type when prompted by the installer to select the installation type.

Step 7
Accept Microsoft license terms, then click the Accept button.


Step 8
Click the Install button. The installer automatically downloads and installs SQL Server.

Step 9
After loading packages, the progress bar will be shown. Wait for a few minutes while the installer downloads and installs packages.

Installation completed for Database Engine.

Congratulations!!! You have successfully installed SQL Server 2022 Developer Edition.

HostForLIFEASP.NET SQL Server 2022 Hosting



European SQL Server 2019 Hosting :: Magic Tables in SQL Server

clock May 17, 2023 08:42 by author Peter

Magic tables are the logical temporary tables created by the SQL server internally to recover recently inserted, deleted, and updated data into the SQL server. They are created during DML trigger execution. If you want to know more about DML triggers, you may refer to my previous article on DML Triggers.

Three types of Magic tables are created at the time of insert/update/delete in the SQL server.

    INSERTED Magic tables
    DELETED Magic tables
    UPDATED Magic tables

Magic tables are stored in temp DB just as a temporary internal table, and we can see them with the help of triggers. We can retrieve the information or the impacted records using these Magic tables.

Let’s see how this works with the use of a trigger.
    When we perform the insert operation, the inserted magic table will have a recently inserted record showing on top of the table.
    When we perform the delete operation, the deleted magic table will have a recently deleted record showing on top of the table.
    When we perform the update operation, the inserted magic table will have a recently updated record showing on top of the table.

Let’s consider the below table to see how this work.
SELECT * FROM StudentsReport;

Inserted Magic Table
Let’s create a trigger on the StudentsReport table to see if the values are inserted on the StudentsReport table and see if a virtual table or temp table (Magic table) is created with recently inserted records.
CREATE TRIGGER  TR_StudentsReport_InsertedMagic ON StudentsReport
FOR INSERT
AS
BEGIN
    SELECT * FROM INSERTED
END


Now when we insert the records in the StudentsReport table, at the same time inserted magic table will be created along with recently inserted records.

Now execute the below queries together.
INSERT INTO StudentsReport VALUES (6, 'Peter', 'English', 90);

SELECT * FROM StudentsReport;


In the above screenshot, we can see that while updating the record in the StudentsReport table, it’s also showing a recently updated record in the temp table, and that temp table is an updated magic table.

Conclusion
Magic tables are one of the features of DML Trigger and can be useful when we want to know the list of impacted records during trigger execution. In this article, first, we have gone through the overview of Magic tables. We have covered the three types of magic tables in detail.

I hope you have liked the article. Please let me know your inputs/feedback in the comments section below.

HostForLIFEASP.NET SQL Server 2019 Hosting



European SQL Server 2019 Hosting :: SQL Where Statement

clock May 10, 2023 10:59 by author Peter

In this article, we will learn about the WHERE statement in SQL. This statement is used to filter the results of a SELECT, UPDATE, or DELETE statement based on specified conditions in SQL.

The syntax of the WHERE clause is as follows
[ WHERE <search_condition> ]

Statement 1. Finding a row by using a simple equality
How to find a specific row in a database table using a simple equality comparison. To do this, you will need to know the name of the table and the name of the column that you want to compare against. For example, if you have a table called "OrderDetails" with columns for "OrderName," "orderAddress," and "OrderDate," you could find a specific customer by searching for their OrderName like this.
SELECT OrderName, orderAddress,OrderDate
FROM OrderDetails
WHERE OrderName  = 'Apple' ;


The SQL query you provided selects the columns 'OrderName,' 'orderAddress,' and 'OrderDate' from the 'OrderDetails' table where the 'OrderName' is equal to 'Apple.' Assuming that the 'OrderName' column contains the name of the product being ordered and the 'orderAddress' column contains the address where the order is being delivered, this query would return the 'OrderName,' 'orderAddress,' and 'OrderDate' information for all orders of the product 'Apple.'

Note. that the syntax and exact query result would depend on the specific schema and data in the 'OrderDetails' table.

Output

Statement 2. Finding rows by using a comparison operator
Using simple equality, you can use the following SQL query to find a row in a database table.
SELECT OrderName, OrderAddress
FROM OrderDetails
WHERE OrderId <= 5;


The SQL query you provided selects the OrderName and OrderAddress columns from the OrderDetails table where the OrderId is less than or equal to 5. The WHERE clause filters the rows of the table based on a specified condition. In this case, the condition is OrderId <= 5, which means that only rows where the OrderId column has a value less than or equal to 5 will be returned.

The result of this query will be a table containing the OrderName and OrderAddress values for the rows where the OrderId is less than or equal to 5. The number of rows returned will depend on how many rows in the OrderDetails table satisfy the condition.

Output

Statement 4. Finding rows that must meet several conditions
To find rows that must meet several conditions in SQL, you can use the AND operator in the WHERE clause. The AND operator allows you to combine two or more conditions that must be true for a row to be included in the query result.
SELECT OrderName, orderAddress
FROM OrderDetails
WHERE OrderId <= 1 AND OrderName LIKE '%App%' AND orderAddress LIKE '%N%';

This SQL query selects the OrderName and orderAddress columns from the OrderDetails table, where the OrderId is less than or equal to 1, the OrderName contains the substring "App," and the orderAddress contains the letter "N". In other words, it will return the order details for any orders with an OrderId of 1 or less, a name containing "App," and an address containing the letter "N". Please note that the syntax and functionality of this query may vary depending on the specific SQL implementation being used.

Output

Statement 5. Finding rows that are in a list of values  
You can use a SQL query with the IN operator to find rows in a list of values. Here's an example:

Suppose you have a table called OrderDetails with columns OrderName and Address, and you want to find all rows where the name is in a list of values ('Apple,' 'Mango,' 'Banna'). You can use the following query.
SELECT OrderName, orderAddress
FROM OrderDetails
WHERE OrderName IN ('Apple', 'Mango', 'Banna');

SQL query that selects the "OrderName" and "orderAddress" columns from the "OrderDetails" table, but only for orders with an "OrderName" of 'Apple,' 'Mango,' or 'Banna.' Here is the revised code with the corrected spelling for "Banana."

Output 

This query will return a result set containing the "OrderName" and "orderAddress" columns for all orders with an "OrderName" of 'Apple,' 'Mango,' or 'Banana.'
Conclusion  

This article taught us learned the basics of the SQL Where Statement.  

FAQs   

Q- What is the WHERE statement in SQL?

A- The WHERE statement is a clause in SQL that is used to filter data based on a specific condition. It is used in conjunction with the SELECT statement to retrieve data from one or more tables in a database.

Q- What are some common operators used in the WHERE statement?

A- Some common operators used in the WHERE statement include

    Equals (=)
    Not equals (<> or !=)
    Less than (<)
    Greater than (>)
    Less than or equal to (<=)
    Greater than or equal to (>=)
    LIKE (used for pattern matching)
    IN (used to check if a value is in a list)  

Q- Can you use multiple conditions in a WHERE statement?

A- Yes, you can use multiple conditions in a WHERE statement by using logical operators such as AND, OR, and NOT.

Q- What is the order of precedence for logical operators in a WHERE statement?

A- The order of precedence for logical operators in a WHERE statement is as follows

    NOT
    AND
    OR

HostForLIFEASP.NET SQL Server 2019 Hosting



European SQL Server 2019 Hosting :: LOGON Triggers in SQL Server

clock May 9, 2023 08:30 by author Peter

In the previous article (DDL Trigger), we have gone through the DDL trigger in detail. In this article, we shall cover Logon Triggers. So, let’s begin.

Logon Trigger

Logon trigger is a special kind of stored procedure that fires automatically when a LOGON event is detected, or a new database connection is established. Logon triggers are similar to DDL triggers and are created at the server level.

Need of Logon Trigger
There are a few use cases as follows where you may need to have a logon trigger.
    Tracking logon activity.
    Restrict connections to the SQL Server.
    Limit the number of sessions for a particular login.

Logon Trigger Syntax
CREATE TRIGGER trigger_name
ON { ALL SERVER }
FOR LOGON
AS
    BEGIN
        {sql_statement}
    END
GO

Now let’s create a logon trigger to understand more.
CREATE TRIGGER OPS_LOGON
   ON ALL SERVER
   AFTER LOGON
   AS
   BEGIN
      PRINT SUSER_SNAME() + 'HAS JUST LOGGED IN TO '+UPPER(LTRIM(@@SERVERNAME))+ 'SQL SERVER AT '+LTRIM(GETDATE())
   END
   GO

As you can see above that logon trigger “OPS_LOGON” is created.

Creating a LOGON Trigger restricts a user from simultaneously opening more than one connection with the SQL Server.

Let’s take another example.

Limit the number of sessions for a particular login.
CREATE TRIGGER limitingnumberofsessions
ON ALL SERVER WITH EXECUTE AS 'sa'
FOR LOGON
AS
BEGIN
IF ORIGINAL_LOGIN() <> 'sa'
AND
( SELECT COUNT(*)
FROM sys.dm_exec_sessions
WHERE Is_User_Process = 1 AND
Original_Login_Name = ORIGINAL_LOGIN()
) > 2
ROLLBACK
END

 

As you can see above the logon trigger “limitingnumberofsessions” is created.
All the LOGON triggers are created under the Server Objects -> Triggers folder, as shown above.

Now let’s go over some useful SQL commands used to manage triggers.

Following Syntax is to Disable Triggers in SQL Server
DISABLE TRIGGER [schema_name].[trigger_name] ON [object_name | DATABASE | ALL SERVER];

Example
DISABLE TRIGGER dbo.insertupdatedelete_trigger ON Employees;

Following Syntax is to Enable Triggers in SQL Server
ENABLE TRIGGER [schema_name.][trigger_name] ON [object_name | DATABASE | ALL SERVER];

Example
ENABLE TRIGGER dbo.insertupdatedelete_trigger ON dbo.Employees;

Following Syntax is to remove/drop DML Triggers
DROP TRIGGER [IF EXISTS] [schema_name.]trigger1, trigger2, ... ];

Example
DROP TRIGGER dbo.insertupdatedelete_trigger;

Following Syntax is to remove/drop DDL or LOGON Triggers
DROP TRIGGER [ IF EXISTS ] trigger_name [ ,...n ]   ON { DATABASE | ALL SERVER };

Example (DDL Trigger)
DROP TRIGGER IF EXISTS insertupdatedelete_trigger ON DATABASE;

Example (LOGON Trigger)
DROP TRIGGER IF EXISTS insertupdatedelete_trigger ON ALL Server;

List all the Triggers in SQL Server
Below query lists all the triggers available in the database
SELECT * FROM sys.triggers WHERE type = 'TR';

Advantages of Triggers

Below are the most common advantages of triggers
    Triggers are easy to write as they are similar to stored procedures.
    They allow us to build a basic auditing system.
    We can call other stored procedures and functions inside a trigger.

Disadvantages of Triggers
While creating triggers brings some useful benefits in tracking database events and activities. Below are the most common cons of using triggers.
    Triggers add additional overhead and slow down to DML statements a bit.
    Having a lot of nested triggers and recursive triggers can be difficult to debug and troubleshoot.
    Triggers are a bit difficult to locate as they work in the background.

Summary
Trigger is a very useful database object to keep track of database events. In this article, first, we have gone through the Logon trigger in detail. Post that, we have covered some of the useful queries related to triggers and pros/cons of them.

HostForLIFEASP.NET SQL Server 2019 Hosting



European SQL Server 2019 Hosting :: SQL Server Constraints: Types and Usage

clock May 5, 2023 10:04 by author Peter

SQL Server is a popular relational database management system used by businesses to store and manage their data. In SQL Server, constraints are used to define rules that ensure data integrity and consistency within a database. In this article, we will explore the different types of SQL Server constraints and how they can be used in database design.

Types of SQL Server Constraints

There are several types of constraints that can be defined for a table.

Here are the most common types of constraints in SQL Server.

Primary Key Constraint

A primary key constraint is used to enforce the uniqueness of a column or a combination of columns. This constraint is essential for ensuring data integrity and is often used to join tables. It ensures that each row in a table has a unique identifier. For example, a primary key constraint could be used to ensure that each customer in a database has a unique customer ID.

CREATE TABLE your_table_name (
  column1 datatype PRIMARY KEY,
  column2 datatype,
  column3 datatype,
  ...
);

The PRIMARY KEY keyword is used to define the primary key constraint on a column. The column specified as the primary key will uniquely identify each row in the table. For example, to create a primary key constraint on the "CustomerId" column of a table named "Customers".
CREATE TABLE Customers (
    CustomerID INT PRIMARY KEY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    Email VARCHAR(50)
);


We can also modify an existing table to add a primary key constraint using the ALTER TABLE statement. For example,
ALTER TABLE Customers
ADD PRIMARY KEY (CustomerId);

Here are some benefits of using a primary key constraint in SQL Server,
Uniqueness- A primary key constraint ensures that each row in the table has a unique identifier value. This means that no two rows in the table can have the same primary key value. This helps prevent data duplication and ensures data integrity.

Referential integrity- A primary key constraint is often used as a reference point for other tables in a database. By creating a foreign key constraint that references the primary key of another table, you can ensure that the data in both tables is consistent and accurate.

Indexing- SQL Server automatically creates a clustered index on the primary key column(s) of a table. This can improve query performance by allowing the database engine to quickly locate specific rows based on their primary key value.

Data modification- A primary key constraint can help prevent unintended changes to data in a table. For example, if you try inserting a row into a table with the same primary key value as an existing row, the database engine will raise an error.

Foreign Key Constraint

A foreign key constraint is used to create a relationship between two tables. It ensures that a value in one table matches a value in another table. This constraint is used to maintain referential integrity between tables. For example, a foreign key constraint could be used to ensure that each order in a database is associated with a valid customer.
CREATE TABLE child_table (
    column1 datatype,
    column2 datatype,
    column3 datatype,
    ...
    FOREIGN KEY (column1)
      REFERENCES parent_table (parent_column)
);


The FOREIGN KEY keyword is used to define the foreign key constraint on a column in the child table. The REFERENCES keyword is used to specify the referenced table and column in the parent table. For example, to create a foreign key constraint on the "CustomerId" column of a table named "Orders", which references the "CustimerId" column of a table named "Customers".
CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    CustomerID INT,
    OrderDate DATE,
    FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);


We can also modify an existing table to add a foreign key constraint using the ALTER TABLE statement. For example:
ALTER TABLE Orders
  ADD FOREIGN KEY (CustomrrId)
    REFERENCES Customers (CustomerId);


Here are some benefits of using a foreign key constraint in SQL Server,
Referential integrity- A foreign key constraint ensures that data in related tables is consistent and accurate. By creating a foreign key constraint that references the primary key of another table, you can ensure that data in the referencing table is always linked to valid data in the referenced table.
Cascading updates and deletes- When a foreign key constraint is defined with cascade options, SQL Server can automatically update or delete related data in child tables when the parent table is modified. This can help maintain data consistency and simplify database maintenance.
Query performance- When a foreign key constraint is defined, SQL Server automatically creates an index on the referencing column(s). This can improve query performance by allowing the database engine to quickly locate related rows based on their foreign key value.
Data modification- A foreign key constraint can help prevent unintended changes to data in related tables. For example, if you try to delete a row from a table referenced by a foreign key in another table, the database engine will raise an error.

Unique Constraint
A unique constraint ensures that a column or a combination of columns has unique values. Unlike a primary key constraint, a unique constraint allows for null values. This constraint is often used to enforce business rules, such as ensuring that each product in a database has a unique product code.

Syntax
CREATE TABLE table_name (
    column1 datatype UNIQUE,
    column2 datatype,
    column3 datatype,
    ...
);

The UNIQUE keyword is used to define the unique key constraint on a column. The column specified as the unique key will have a unique value for each row in the table. For example, to create a unique key constraint on the "ProductCode" column of a table named "Products".
CREATE TABLE Products (
    ProductID INT PRIMARY KEY,
    ProductCode VARCHAR(50) UNIQUE,
    ProductName VARCHAR(50),
    Price DECIMAL(10,2)
);


We can also modify an existing table to add a unique key constraint using the ALTER TABLE statement.

For example
ALTER TABLE Products
ADD CONSTRAINT Products_ProductCode UNIQUE (ProductCode);


Here are some benefits of using a unique constraint in SQL Server.
Data integrity- A unique constraint ensures that data in a table is consistent and accurate. By preventing duplicate values in specified columns, you can avoid data duplication and ensure that each row in the table has a unique identity.
Query performance- When a unique constraint is defined, SQL Server automatically creates a non-clustered index on the specified column(s). This can improve query performance by allowing the database engine to quickly locate specific rows based on their unique values.
Simplified database management- A unique constraint can help simplify database management by reducing the need for manual checks for duplicate data. By enforcing uniqueness at the database level, you can avoid the need for additional code to ensure data consistency.
Flexible constraints- Unlike primary key constraints, a unique constraint can be defined on columns that allow null values. This can be useful in scenarios where you want to ensure that no two rows have the same value but also allow null values in the specified column(s).

Check Constraint
A check constraint is used to enforce a condition on a column. It ensures that the values in a column meet a specified condition. This constraint is often used to enforce business rules, such as ensuring that a product's price is greater than zero.

CREATE TABLE table_name (
  column1 datatype,
  column2 datatype,
  column3 datatype,
  ...
  CONSTRAINT constraint_name CHECK (condition)
);

The CONSTRAINT keyword is used to define the check constraint on a column or set of columns. The CHECK keyword is used to specify the condition that must be met for the constraint to be satisfied. For example, create a check constraint on the "Age" column of a table named "Users", which ensures that the age is greater than or equal to 18.
CREATE TABLE Users (
  Id INT PRIMARY KEY,
  Name VARCHAR(50),
  Age INT CONSTRAINT CHK_Users_Age CHECK (Age >= 18),
  Email VARCHAR(100)
);

We can also modify an existing table to add a check constraint using the ALTER TABLE statement.

For example
ALTER TABLE Users
ADD CONSTRAINT CHK_Users_Age CHECK (Age >= 18);


Here are some benefits of using a check constraint in an SQL Server,

  • Data integrity- A check constraint ensures that data in a table meets specific criteria. By preventing invalid data from being inserted or updated in the table, you can ensure data consistency and accuracy.
  • Simplified database management- A check constraint can help simplify database management by reducing the need for additional code to ensure data consistency. By enforcing data validation at the database level, you can avoid the need for additional application codes to check data validity.
  • Flexible constraints- A check constraint can be defined on a single column or multiple columns and can use a wide range of conditions to validate data. This flexibility allows you to create custom validation rules that meet specific business requirements.
  • Improved performance- By ensuring that only valid data is stored in a table, a check constraint can improve query performance. This is because the database engine doesn't have to spend time searching for and filtering out invalid data when executing queries.

Default Constraint
A default constraint is used to provide a default value for a column. It ensures a column has a value even when not specified. This constraint is often used to provide default values for optional columns.

CREATE TABLE table_name (
    column1 datatype DEFAULT default_value,
    column2 datatype,
    column3 datatype,
    ...
);


The DEFAULT keyword is used to define the default constraint on a column. The default_value specified will be used as the default value for the column when a new row is inserted, and no value is specified for that column. For example, to create a default constraint on the "Role" column of a table named "Users" with a default value of 'User'.
CREATE TABLE Users (
    Id INT PRIMARY KEY,
    Name VARCHAR(50),
    Role VARCHAR(50) DEFAULT 'User',
    Email VARCHAR(100),
    Age INT
);

We can also modify an existing table to add a default constraint using the ALTER TABLE statement.

For example
ALTER TABLE Users
ADD CONSTRAINT DF_Users_Role DEFAULT 'User' FOR Role;

Here are some benefits of using a default constraint in SQL Server.
Data consistency- A default constraint ensures that a default value is used consistently across all rows in a table when no other value is specified. This can help ensure that data is consistent and accurate and that the data in the column is always populated with a value.
Simplified database management- A default constraint can help simplify database management by automatically populating columns with default values. This can reduce the need for additional application code to populate columns with default values.
Improved performance- By automatically populating columns with default values, a default constraint can improve performance by reducing the amount of data that needs to be updated or inserted. This can help minimize the amount of time needed to process data and improve overall database performance.
Flexibility- A default constraint can be defined on a single column or multiple columns and can use a wide range of default values to populate the column(s). This flexibility allows you to create custom default values that meet specific business requirements.

Conclusion
SQL Server constraints are essential for ensuring data integrity and consistency. They help to enforce rules and restrictions on data stored in tables. The different constraints in SQL Server can be used in various scenarios to ensure data is correctly stored and maintained. Using constraints, we can ensure that your database is accurate, reliable, and secure.

 

HostForLIFEASP.NET SQL Server 2019 Hosting



European SQL Server 2019 Hosting :: Order of SQL Execution

clock April 17, 2023 07:27 by author Peter

SQL is a widely used programming language for managing and manipulating relational databases. SQL statements are executed in a specific order to produce the desired results. Understanding the order of SQL execution is crucial for developing efficient and effective SQL queries. In this article, we will discuss the order of SQL execution with clear examples.

SQL execution order can be divided into three major parts.
    FROM and JOIN
    WHERE, GROUP BY, and HAVING
    SELECT and ORDER BY


Let’s explore each of these parts in more detail.

FROM and JOIN in SQL
The first step in SQL execution is to retrieve data from one or more tables using the FROM and JOIN clauses. The FROM clause specifies the tables from which data is retrieved, while the JOIN clause combines data from multiple tables.

For example, consider the following SQL query,
SELECT *
FROM orders
JOIN customers ON orders.customer_id = customers.customer_id

In this query, the FROM clause retrieves data from the “orders” table, and the JOIN clause combines data from the “customers” table based on the “customer_id” column.
WHERE, GROUP BY, and HAVING in SQL

After retrieving data from one or more tables, the next step is to filter the data based on certain criteria using the WHERE clause. The WHERE clause is used to specify conditions that must be met by the data being retrieved.

For example, consider the following SQL query,
SELECT *
FROM orders
JOIN customers ON orders.customer_id = customers.customer_id
WHERE customers.country = 'USA'


In this query, the WHERE clause filters the data only to retrieve orders made by customers from the United States.

GROUP BY in SQL
This clause is used to group the retrieved data based on one or more columns. The HAVING clause filters the grouped data based on certain criteria.

For example, consider the following SQL query,
SELECT COUNT(*) AS order_count, customers.country
FROM orders
JOIN customers ON orders.customer_id = customers.customer_id
GROUP BY customers.country
HAVING COUNT(*) > 100

In this query, the GROUP BY clause groups the retrieved data by country, and the HAVING clause filters the grouped data to only retrieve countries with more than 100 orders.

SELECT and ORDER BY in SQL
The final step in SQL execution is to select the columns to be displayed using the SELECT clause. The SELECT clause specifies the columns to be displayed and can also include aggregate functions to perform calculations on the retrieved data.

For example, consider the following SQL query,
SELECT customers.customer_id, customers.name, COUNT(*) AS order_count
FROM orders
JOIN customers ON orders.customer_id = customers.customer_id
GROUP BY customers.customer_id, customers.name
ORDER BY order_count DESC

In this query, the SELECT clause specifies the customer ID, name, and the number of orders they have made. The ORDER BY clause orders the results by the number of orders in descending order.

Understanding the order of SQL execution is crucial for developing efficient and effective SQL queries. The FROM and JOIN clauses retrieve data from one or more tables, the WHERE, GROUP BY, and HAVING clauses filter and group the retrieved data, and the SELECT and ORDER BY clauses select and order the columns to be displayed. By following this order of execution, you can write complex SQL queries with ease and efficiency.

HostForLIFEASP.NET SQL Server 2019 Hosting



European SQL Server 2019 Hosting :: Synchronizing Databases Using Microsoft Sync Framework

clock April 14, 2023 08:57 by author Peter

Microsoft Sync Framework is a powerful tool for synchronizing data across multiple databases or devices. You'll need to write some C# code that defines the synchronization logic to use it. Here's an example of using the Sync Framework to synchronize two SQL Server databases.

First, you'll need to add a reference to the Sync Framework assemblies in your C# project. You can do this by right-clicking on your project in Visual Studio, selecting "Add Reference", and then browsing to the location of the Sync Framework assemblies (usually C:\Program Files\Microsoft Sync Framework\2.0\Runtime).

Second, you'll need to define the databases you want to synchronize. In this example, we'll assume you have a "local" SQL Server database on your computer and a "remote" database on a server somewhere. Here's some sample code that defines these databases:

SqlSyncProvider localProvider = new SqlSyncProvider("LocalConnectionString");
SqlSyncProvider remoteProvider = new SqlSyncProvider("RemoteConnectionString");

In this code, "LocalConnectionString" and "RemoteConnectionString" should be replaced with the actual connection strings for your local and remote databases.

Next, you'll need to define the tables you want to synchronize. Here's some sample code that defines a single table called "Customers":
SyncTable customerTable = new SyncTable("Customers");
customerTable.SyncDirection = SyncDirection.Bidirectional;
customerTable.CreationOption = TableCreationOption.DropExistingOrCreateNewTable;
customerTable.Columns.AddRange(new string[] { "CustomerId", "FirstName", "LastName", "Email" });


This code creates a SyncTable object for the Customers table, sets the synchronization direction to bidirectional (meaning changes in either database will be synchronized to the other), and specifies that the table should be dropped and recreated if it already exists. Finally, it adds the four columns that we want to synchronize.

Now that we've defined our local and remote providers and Customers table, we can create a SyncOrchestrator object to handle the synchronization. Here's some sample code that does this:
SyncOrchestrator orchestrator = new SyncOrchestrator();
orchestrator.LocalProvider = localProvider;
orchestrator.RemoteProvider = remoteProvider;
orchestrator.Direction = SyncDirectionOrder.UploadAndDownload;
orchestrator.Synchronize();


This code creates a SyncOrchestrator object, sets the local and remote providers, sets the synchronization direction to upload and download (meaning changes in both databases will be synchronized), and then calls the Synchronize method to start the synchronization process.

This is just a simple example, and there are many more options and settings that you can use to customize the synchronization process. But hopefully, this gives you a good starting point for using the Microsoft Sync Framework in your C# applications.

HostForLIFEASP.NET SQL Server 2019 Hosting



European SQL Server 2019 Hosting :: How To Configure Transactional Replication In MS SQL Server?

clock April 11, 2023 07:51 by author Peter

What is Replication?
MS SQL Server database replication is a technology for copying, distributing, and synchronizing data and objects from one database to another continuously or at predetermined intervals.

Types of Replication in SQL Server
There are four types of replication in MS SQL Server,

  • Transactional replication
  • Peer-to-peer replication
  • Merge replication
  • Snapshot replication

Transactional replication
Transactional replication is a technique used in Microsoft SQL Server to distribute and synchronize data from one database to another. This type of replication is commonly used in scenarios where there is a need to keep multiple databases in sync, such as in a distributed or remote environment. This article will discuss how to configure MS SQL Server Transactional Replication.

Peer-to-Peer replication
Peer-Peer publication enables multi-master replication. The publisher streams transactions to all the peers in the topology. All peer nodes can read and write changes, which are propagated to all the nodes in the topology.

Merge replication

The Publisher and Subscribers can update the published data independently after the Subscribers receive an initial snapshot of the published data. Changes are merged periodically. Microsoft SQL Server Compact Edition can only subscribe to merge publications.

Snapshot replication
The Publisher sends a snapshot of the published data to Subscribers at scheduled intervals.

Here we will learn how to configure Transactional replication.

Step 1. Prepare the Environment
Before configuring transactional replication, you must ensure a stable and reliable SQL Server environment. This includes ensuring that you have the necessary permissions to create and manage replication and that the SQL Server instances are properly configured to support replication. You also need to ensure that the databases to be replicated are compatible with transactional replication.

Step 2. Create a Publication
The first step in configuring transactional replication is to create a publication. A publication is a set of one or more articles that define the data to be replicated. To create a publication, follow these steps,

  • Open SQL Server Management Studio (SSMS) and connect to the SQL Server instance.
  • Expand the Replication folder, right-click the Local Publications folder, and select New Publication.
  • The New Publication Wizard will start. Click Next to proceed.
  • Select the database that you want to replicate and click Next.
  • Select Transactional publication and click Next.
  • Select the articles that you want to replicate and click Next.
  • Configure the snapshot options, such as when to generate a new snapshot and where to store it. Click Next.
  • Configure the subscription options, such as the type of subscription and the security settings. Click Next.
  • Review the summary and click Finish

Step 3. Create a Subscription
Once you have created a publication, you need to create a subscription. A subscription is a copy of the publication on another SQL Server instance. To create a subscription, follow these steps,

  • Open SQL Server Management Studio (SSMS) and connect to the SQL Server instance where you want to create the subscription.
  • Expand the Replication folder, right-click the Local Subscriptions folder, and select New Subscription.
  • The New Subscription Wizard will start. Click Next to proceed.
  • Select the publication that you want to subscribe to and click Next.
  • Configure the subscription options, such as the type of subscription and the security settings. Click Next.
  • Configure the synchronization options, such as when and how to handle conflicts. Click Next.
  • Review the summary and click Finish.

Step 4. Configure Replication Agents
After creating a publication and subscription, you need to configure replication agents. Replication agents are processes that manage the replication process between the publisher and subscriber. There are two types of replication agents: the Snapshot Agent and the Log Reader Agent. To configure the agents, follow these steps,

  • Open SQL Server Management Studio (SSMS) and connect to the SQL Server instance.
  • Expand the Replication folder and right-click the Publication folder. Select Properties.
  • Select the Snapshot Agent tab and configure the options, such as the schedule and the delivery method. Click OK.
  • Select the Subscription folder and right-click the subscription. Select Properties.
  • Select the Subscription Options tab and configure the options, such as the schedule and the delivery method. Click OK.


Step 5. Start the Replication Process
Once you have completed the above steps, you must start the replication process. To start the replication process, follow these steps,

  • Open SQL Server Management Studio (SSMS) and connect to the SQL Server instance.
  • Expand the Replication folder and select the Publication folder.
  • Right-click the publication and select Start Synchronizing.
  • The Start Synchronizing Wizard will start. Click Next to proceed.
  • Review the synchronization settings and click Next.

    1. Select the subscription database and click Next.
    2. Select the subscription database and click Next.

The replication process will start, and you can monitor its progress in the Replication Monitor window in SQL Server Management Studio.

Configuring MS SQL Server Transactional Replication can be a complex task, but it is essential for maintaining data consistency in distributed or remote environments. By following the steps outlined in this article, you can configure transactional replication in a way that meets your specific requirements.

Before deploying it in a production environment, remember to test the replication process thoroughly. With proper planning and testing, transactional replication can be a powerful tool for ensuring data consistency across multiple databases.

In the above article, we will learn how to configure Transactional replication in SQL Server. Hope this will help the readers. Happy Coding!!!

HostForLIFEASP.NET SQL Server 2019 Hosting



About HostForLIFE

HostForLIFE is European Windows Hosting Provider which focuses on Windows Platform only. We deliver on-demand hosting solutions including Shared hosting, Reseller Hosting, Cloud Hosting, Dedicated Servers, and IT as a Service for companies of all sizes.

We have offered the latest Windows 2019 Hosting, ASP.NET 5 Hosting, ASP.NET MVC 6 Hosting and SQL 2019 Hosting.


Month List

Tag cloud

Sign in