Connecting to SQL Server using R

When analyzing data in R it is often best to source data directly, and because so much data exists in rational databases such as SQL Server it is important that we are able to connect to this data without first exporting it to a common format like CSV only to import that data into R. RODBC is a package that allows access to databases using an ODBC interface. To use RODBC you can connect using an ODBC connection as documented here or you can connect using a connection string as seen in the code snippet below.


#install.packages("RODBC")

library(RODBC)

dbConn <-  odbcDriverConnect('driver={SQL Server};server=localhost;database=MyDatabase;trusted_connection=true')

tableList <- sqlQuery(dbConn, 'select * from INFORMATION_SCHEMA.TABLES')

close(dbConn)

In this example, I have used a trusted connection but you would be able to provide a UserName and password (for more on connection strings make sure to check out connectionstrings.com).

DROP IF EXISTS in SQL2016

Before SQL Server 2016 if you wanted to drop an object such as a table you would first have to check if that object existed, then if it did exist delete it. The code could look something like this.


IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES T WHERE TABLE_NAME = 'MyTable' AND TABLE_SCHEMA = 'DBO')

DROP TABLE [dbo].[MyTable];

With the enhancement, the code above could be reduced to.


DROP TABLE IF EXISTS [dbo].[MyTable];

This code is both simpler to read and implement which is never a bad thing. Tables are not the only things that can be dropped in this way and other objects such as indexes, schema and even databases can also be dropped in this way.

In addition to dropping the objects,  you can also use the DROP IF EXIST in the ALTER TABLE statement to drop columns or constraints.


DROP TABLE IF EXISTS [dbo].[MyTable];

CREATE TABLE [dbo].[MyTable]

(

[ID] INT,

[SomeColumn] INT,

CONSTRAINT PK_MyTable_ID PRIMARY KEY CLUSTERED ([ID])

);

ALTER TABLE [dbo].[MyTable] DROP COLUMN IF EXISTS [SomeColumn];

ALTER TABLE [dbo].[MyTable] DROP CONSTRAINT IF EXISTS [PK_MyTable_ID];

This is a great addition to T-SQL however, I feel a CREATE OR ALTER IF EXISTS would be more useful although understandably harder to implement and is something we will hopefully see in the near future.