Kiểm tra khóa chính trước khi Insert trong Stored Procedure

Khi làm việc với Cơ sở dữ liệu chúng ta hay gặp các tình huống phát sinh lỗi do ràng buộc dữ liệu. Ví dụ khi người dùng đăng ký thành viên, chúng ta cần kiểm tra email có tồn tại hay chưa? Hoặc thêm một sản phẩm (ở đây là sách) vào trong CSDL, cần kiểm tra mã sách tồn tại hay chưa? Chúng ta dễ dàng kiểm tra bằng hàm EXISTS  trong Stored Procedure của SQL.

SQL EXISTS được sử dụng kết hợp với một truy vấn phụ và được coi là đáp ứng, nếu trả về ít nhất một dòng . Nó có thể được sử dụng trong các trường hợp như SELECT, INSERT, UPDATE, hoặc DELETE .

Hướng dẫn sau giúp bạn kiểm tra Mã sách tồn tại hay chưa trước khi thực thi lệnh INSERT dữ liệu. Nếu có rồi thì bỏ qua, ngược lại thì INSERT vào trong CSDL.

Code tạo bảng mẫu

Create Table Book
(
    BookID nvarchar(50) primary key,
    Name nvarchar(50),
    Author nvarchar(50)
)
insert into Book(BookID, Name, Author) values('B01',N'Lá nằm trong lá',N'Nguyễn Nhật Ánh')

Code tạo thủ tục

create procedure Book_Insert
(
    @BookID nvarchar(50),
    @Name nvarchar(50),
    @Author nvarchar(50)
)
as
begin
    if not exists(select top 1 BookID from Book where BookID = @BookID)
        insert into Book(BookID, Name, Author) values(@BookID,@Name,@Author)
end
-- Test
exec Book_Insert 'B02', 'Văn học VN','Không rõ'

Chúc các bạn thành công

Các kiểu dữ liệu trong SQL Server

Khi thực hành với SQL server thì đa số chúng ta có người thì hiểu lơ mơ, có người thì chỉ chép lại bài thực hành mà không hiểu kiểu biến đó được dùng để làm gì. Cái đó rất là bất cập, để có thể hiểu rõ hơn về các kiểu dữ liệu khi ép kiểu mình xin đưa ra những tổng hợp mà mình tìm hiểu và biết được.

 

DATA TYPES DESCRIPTION
bigint Integer data from -2^63 through 2^63-1
int Integer data from -2^31 through 2^31 – 1
smallint Integer data from -2^15 through 2^15 – 1
tinyint Integer data from 0 through 255
bit Integer data with either a 1 or 0 value
decimal Fixed precision and scale numeric data from -10^38 +1 through 10^38 -1
numeric Fixed precision and scale numeric data from -10^38 +1 through 10^38 -1
money Monetary data values from -2^63 through 2^63 – 1
smallmoney Monetary data values from -214,748.3648 through +214,748.3647
float Floating precision number data from -1.79E + 308 through 1.79E + 308
real Floating precision number data from -3.40E + 38 through 3.40E + 38
datetime Date and time data from January 1, 1753, through December 31, 9999,
with an accuracy of 3.33 milliseconds
smalldatetime Date and time data from January 1, 1900, through June 6, 2079,
with an accuracy of one minute
char Fixed-length character data with a maximum length of 8,000 characters
varchar Variable-length data with a maximum of 8,000 characters
text Variable-length data with a maximum length of 2^31 – 1 characters
nchar Fixed-length Unicode data with a maximum length of 4,000 characters
nvarchar Variable-length Unicode data with a maximum length of 4,000 characters
ntext Variable-length Unicode data with a maximum length of 2^30 – 1 characters
binary Fixed-length binary data with a maximum length of 8,000 bytes
varbinary Variable-length binary data with a maximum length of 8,000 bytes
image Variable-length binary data with a maximum length of 2^31 – 1 bytes
cursor A reference to a cursor
sql_variant A data type that stores values of various data types,
except text, ntext, timestamp, and sql_variant
table A special data type used to store a result set for later processing
timestamp A database-wide unique number that gets updated every time
a row gets updated
uniqueidentifier A globally unique identifier

———————————————————————————————————————–

Diễn giải:

Binary: Là kiểu dữ liệu chứa dạng số ở hệ hexa, gồm 3 kiểu dữ liệu Binary, Varbinary, Image.

Text: Là kiểu ký tự, chứa chữ cái, ký hiệu, số, gồm những kiểu dữ liệu sau:

– Char: Kiểu ký tự, khi xác định độ dài thì độ dài trong CSDL sẽ xác định theo độ dài đặt trước mà không theo độ dài dữ liệu thực có, không sử dụng với ký tự dạng Unicode, độ dài tối đa là 8000.
– Ncharr: Tương tự như Char nhưng sử dụng với ký tự Unicode, độ dài tối đa 4000.
– Nvarchar: Tương tự như NChar nhưng kích thước trong CSDL sẽ là kích thước thực dữ liệu hiện có, không tính theo kích thước đặt trước, kích thước tối đa là 4000.
– Varchar: Tương tự như Nvarchar nhưng không hỗ trợ Unicode.
– Text: Kiểu văn bản, chứa cả ký tự xuống dòng, lưu trữ theo dạng văn bản, có kích thước lớn, có thể lên đến vài Gb, cơ chế quản lý kiểu dữ liệu theo dạng con trỏ và cách thức chèn và cập nhật sẽ khác, kiểu dữ liệu này không hỗ trợ cho Unicode.
– Ntext: Tương tự như Text nhưng có hỗ trợ Unicode.

Data/Time: Kiểu dữ liệu ngày, thời gian, ngày và thời gian, gồm 2 kiểu:

– DateTime: Đầy đủ cả ngày và thời gian.
– SmallDataTime: Chỉ ngày hoặc thời gian.

Numeric: Dữ liệu kiểu số, gồm các kiểu dữ liệu sau:

– Int, smallint, tinyint, bigint: Số nguyên
– Float, real, decimal, numeric: Số thực.

Monetary: Tiền tệ:

– Money, Smallmoney.

Bit: Kiểu số 0, 1.

Sql_variant: Là kiểu dữ liệu xác định theo kiểu dữ liệu khác, một cột dữ liệu được định nghĩa dữ liệu kiểu này có thể lưu trữ nhiều dữ liệu có kiểu khác nhau trong cùng một bảng. Ví dụ có thể lưu trữ nhiều kiểu dữ liệu int, binary, char, nhưng không chứa dữ liệu kiểu text, ntext, image, timestamp, sql_variant.

Timestamp: Là kiểu dữ liệu có kích thước 8 byte, lưu trữ dạng số nhị phân do hệ thống tự sinh ra, mỗi giá trị timestamp trong CSDL là duy nhất.

XML: Là kiểu dùng để lưu trữ dữ liệu dưới dạng xml

 

Nguồn: tham khảo internet

SQL Server connection strings

Chào các bạn. Trong quá trình tham gia các diễn đàn, mình hay bắt gặp nhiều bạn hay gặp lỗi khi kết nối CSDL trong C#, hay ASP.NET. Do vậy mình chia sẻ một số cách kết nối chuẩn SQL Server connection strings dùng trong các ứng dụng liên quan tới SQL Server như lập trình C#, ứng dụng web ASP.NET, MVC… Hy vọng các bạn bớt khó khăn hơn khi gặp tình huống như vậy. 🙂

Standard Security

Server=myServerAddress;Database=myDataBase;User Id=myUsername; Password=myPassword;
VD: Server=TUANITPRO.com;Database=myDataBase;User Id=myUsername; Password=myPassword;
hoặc
Server=192.168.1.100;Database=myDataBase;User Id=myUsername; Password=myPassword;

Trusted Connection

Server=myServerAddress;Database=myDataBase;Trusted_Connection=True;

Connection to a SQL Server instance

Server=myServerName\myInstanceName;Database=myDataBase;User Id=myUsername;Password=myPassword;
VD:
Server=TUANITPRO-PC\SQLEXPRESS;Database=myDataBase;User Id=myUsername; Password=myPassword;

hoặc
Server=TUANITPRO-PC\SQLEXPRESS;Database=myDataBase;UID=myUsername; PWD=myPassword;
hoặc
Server=.\SQLEXPRESS;Database=myDataBase;User Id=myUsername;Password=myPassword;

Server=.\SQLEXPRESS;Database=myDataBase;UID=myUsername; PWD=myPassword;

Ngoài ra còn một số cách viết khác trong .NET

Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;User ID=myDomain\myUsername;Password=myPassword;
VD:
Data Source=TUANITPRO.com;Initial Catalog=myDataBase;Integrated Security=SSPI;User ID=myUsername;Password=myPassword;
Data Source=192.168.1.100;Initial Catalog=myDataBase;Integrated Security=SSPI;User ID=myDomain\myUsername;Password=myPassword;
Data Source=TUANITPRO-PC\SQLEXPRESS;Initial Catalog=myDataBase;Integrated Security=SSPI;User ID=myDomain\myUsername;Password=myPassword;
Data Source=.\SQLEXPRESS;Initial Catalog=myDataBase;Integrated Security=SSPI;User ID=myDomain\myUsername;Password=myPassword;

*Cách này dùng khi kết nối file *.mdf trong thư mục App_Data của ứng dung web .NET

Server=.\SQLExpress;AttachDbFilename=|DataDirectory|mydbfile.mdf;Database=dbname;Trusted_Connection=Yes;

Chúc các bạn thành công.