6.6 Create,Modify,andDeleteTables
It is common in database applications to programmatically create,modify,anddelete
tables. How do I do this using T-SQL?
Technique
To perform these tasks, you will use the CREATE TABLE, ALTER TABLE, and DROP
TABLE T-SQL statements. With these statements, you can handle any requirements that
your application might have. Look at these statements one at a time.
Creating a Table Using CREATE TABLE
With the CREATE TABLE statement, not only can you specify columns and their data
types, but you also can specify indexes, check constraints, and other table level
properties. For this How-To, you will be use the following T-SQL statement:
CREATE TABLE ListsExample
(
ListID smallint IDENTITY(1, 1) PRIMARY KEY CLUSTERED,
LastName varchar(50) NOT NULL,
FirstName varchar(50) NOT NULL,
Age smallint ,
DateEntered datetime NOT NULL DEFAULT GetDate()
CHECK (DateEntered <= GetDate())
)
This statement shows how to perform a number of different tasks:
1. Specify the name of the table:
2. CREATE TABLE ListsExample
3. Create an Identity column, which is the primary key:
4. ListID smallint IDENTITY(1, 1) PRIMARY KEY CLUSTERED,
5. Create fields that can't be NULL, and using different data types:
6. LastName varchar(50) NOT NULL,
7. FirstName varchar(50) NOT NULL,
8. Age smallint ,
9. Create a field with the Default Value set, and with a Check Constraint specified.
10. DateEntered datetime NOT NULL DEFAULT GetDate()
11. CHECK (DateEntered <= GetDate())
Modifying a Table Using ALTER TABLE
The example T-SQL statement used for modifying the table in this How-To is pretty
simple in that it adds a column and removes (drops) a column:
ALTER TABLE ListsExample ADD MyNewColumn varchar(30)
ALTER TABLE ListsExample DROP COLUMN Age
You can perform quite a few other tasks with this statement. You can even see by the
syntax displayed here that you can handle many tasks, including dropping constraints.
ALTER TABLE table
{ [ ALTER COLUMN column_name
{ new_data_type [ ( precision [ , scale ] ) ]
[ COLLATE < collation_name > ]
[ NULL | NOT NULL ]
| {ADD | DROP } ROWGUIDCOL }
]
| ADD
{ [ < column_definition > ]
| column_name AS computed_column_expression
} [ , n ]
| [ WITH CHECK | WITH NOCHECK ] ADD
{ < table_constraint > } [ , n ]
| DROP
{ [ CONSTRAINT ] constraint_name
| COLUMN column } [ , n ]
| { CHECK | NOCHECK } CONSTRAINT
{ ALL | constraint_name [ , n ] }
| { ENABLE | DISABLE } TRIGGER
{ ALL | trigger_name [ , n ] }
}
You can do even more. Look at the Books Online for SQL Server to see complete
coverage of this statement.
Deleting a Table Using the DROP TABLE Statement
This statement is the easiest, and it's a one liner:
DROP TABLE ListsExample
However, you need to keep some things in mind when you are trying to drop a table:
• You can't use the DROP TABLE statement when the table is used in a relationship
and is referenced in the FOREIGN KEY constraint. You will need to drop the
other table or the constraint.
• You will need to be the administrator or owner of the table to be able to use the
DROP TABLE statement.
• You can't use the DROP TABLE statement on system tables.
Steps
Open and run the Visual Basic .NET-Chapter 6 solution. From the main form, click on
the button with the caption How-To 6.6 (see Figure 6.7).
1. Create a Windows Form. Then place the controls listed in Table 6.6 with the
following properties set, as displayed in Figures 6.7.
Table 6.6. Control Property Settings for This How-To
Object Property Setting
Label Text SQL Statement to Create a Table
Label Name lblCreateTable
Button Name btnCreateTable
Text Create Table
Label Text SQL Statement to Modify a Table
Label Name lblModifyTable
Button Name btnModifyTable
Text Modify Table
Label Text SQL Statement to Delete a Table
Label Name lblDeleteTable
Button Name btnDeleteTable
Text Delete Table
2. Add the code in Listing 6.11 to the Load event of the form. (Double-click on the
form to bring up the code.) This routine creates the SQL statements for all three
tasks and assigns them to the appropriate label for display.
Listing 6.11 frmHowTo6_6.vb: Loading the SQL Statements into the
Appropriate Labels
Private Sub frmHowTo6_6_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MyBase.Load
' Build the SQL String for Creating a Table
Dim strSQL As String
strSQL = "CREATE TABLE ListsExample" & vbCrLf
strSQL &= "(" & vbCrLf
strSQL &= " ListID smallint IDENTITY(1, 1) " & _
"PRIMARY KEY CLUSTERED," & vbCrLf
strSQL &= " LastName varchar(50) NOT NULL, " & vbCrLf
strSQL &= " FirstName varchar(50) NOT NULL, " & vbCrLf
strSQL &= " Age smallint , " & vbCrLf
strSQL &= " DateEntered datetime NOT NULL DEFAULT GetDate() " &
vbCrLf
strSQL &= " CHECK (DateEntered <= GetDate())" & vbCrLf
strSQL &= ")"
Me.lblCreateTable.Text = strSQL
strSQL = "ALTER TABLE ListsExample ADD MyNewColumn varchar(30)
" & vbCrLf
strSQL &= "ALTER TABLE ListsExample DROP COLUMN Age"
Me.lblModifyTable.Text = strSQL
strSQL = "DROP TABLE ListsExample"
Me.lblDeleteTable.Text = strSQL
End Sub
3. Add the code in Listing 6.12 to the Click event of the btnCreateTable button. This
routine calls the function PerformTask(), passing the text in the lblCreateTable
label. PerformTask() is described in the next step. If you perform the task
successfully, then a message box is displayed letting you know that all went as it
should have.
Listing 6.12 frmHowTo6_6.vb: Calling PerformTask() from the
btnCreateTable Click Event
Private Sub btnCreateTable_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnCreateTable.Click
If PerformTask(Me.lblCreateTable.Text) Then
MessageBox.Show("Table Created Successfully, " & _
_Look for ListsExample " &
"Table in Northwind Database in Server Explorer", _
"Action Performed")
End If
End Sub
4. In the class module of the form created for this How-To, create the code displayed
in Listing 6.13 for the PerformTask() function. This code creates a Connection
object. Next, create a Command object that is based on the string passed in
strSQL. Open the connection and execute the command. Notice that the execution
of the command has been wrapped in the Try Catch End Try code block to make
sure the command is executed correctly; if it's not, a message is displayed.
Listing 6.13 frmHowTo6_6.vb: Executing the SQL Statement Passed in Using
strSQL
Function PerformTask(ByVal strSQL As String) As Boolean
Dim cnn As New OleDb.OleDbConnection(BuildCnnStr("(local)",
"Northwind"))
Dim cmdAction As New OleDb.OleDbCommand(strSQL)
cmdAction.Connection = cnn
cnn.Open()
PerformTask = True
Try
cmdAction.ExecuteNonQuery()
Catch excp As Exception
MessageBox.Show(excp.Message, "Error with Action")
PerformTask = False
End Try
cnn.Close()
End Function
5. Add the code snippets in Listing 6.14 to the appropriate Click events for
btnModifyTable and btnDeleteTable to the Load event of the form.
Listing 6.14 frmHowTo6_6.vb: Calling PerformTask from btnModifyTable
and btnDeleteTable Click Events
Private Sub btnModifyTable_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles btnModifyTable.Click
If PerformTask(Me.lblModifyTable.Text) Then
MessageBox.Show("Table Modified Successfully, " & _
Look for ListsExample " &
"Table in Northwind Database in Server Explorer", _
"Action Performed")
End If
End Sub
Private Sub btnDeleteTable_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnDeleteTable.Click
If PerformTask(Me.lblDeleteTable.Text) Then
MessageBox.Show("Table Deleted Successfully, " & _
"Look for ListsExample " &
"Table in Northwind Database in Server Explorer", _
"Action Performed")
End If
End Sub
Figure 6.7. A common problem with inner joins is retrieving multiple records when
you just want to see one per occurrence.
Comments
You don't have to add, modify,anddeletetables manually. Just make sure that you back
up your data before performing these tasks.
. 6.6 Create, Modify, and Delete Tables
It is common in database applications to programmatically create, modify, and delete
tables. How do. Modify Table
Label Text SQL Statement to Delete a Table
Label Name lblDeleteTable
Button Name btnDeleteTable
Text Delete Table
2. Add the code in Listing