Monday, August 12, 2013

Don’t use the KEYWORD in COLUMNS name

Don’t use the KEYWORD in COLUMNS name


The SQL server allows to use the Keywords in Table columns name by using this [ …].
But I think it is not a good idea to use the key words especially if you want migrate the table from another RDBMS. And is not a good practice to use the key words in table columns name.
Suppose you have a database with 1000 of table objects. Now your boss told you to alter the columns name that has the name used by Keywords. Is it possible manually or you just resigned the job.
Here in my article, I am trying to make a function that search the table name and related columns name that have the Keywords used.
So don't think about resignation or others thing – just joking.
The function is ready to use you can add more key words to enrich the functionality of the function.

CREATE  FUNCTION dbo.fn_ChkKeyWord
            (
                  @param_sWord  VARCHAR(255)
            )     RETURNS BIT
AS
BEGIN
      DECLARE @isWorking VARCHAR(255)
      DECLARE @bitRETRUN BIT
     
      SET @isWorking = UPPER(LTRIM(RTRIM(@param_sWord)))
      -- You can Add more Key word to Enrich the Functionality
      SET @bitRETRUN = CASE WHEN @isWorking
      IN('ADD', 'ALL', 'ALTER', 'AND', 'ANY', 'AS', 'ASC','AUTHORIZATION'
      , 'BACKUP', 'BEGIN', 'BETWEEN', 'BREAK', 'BROWSE', 'BULK', 'BY'
      , 'CASCADE', 'CASE', 'CHECK', 'CHECKPOINT', 'CLOSE', 'CLUSTERED'
      , 'COALESCE', 'COLLATE', 'COLUMN', 'COMMIT', 'COMPUTE','CONSTRAINT'
      , 'CONTAINS', 'CONTAINSTABLE', 'CONTINUE', 'CONVERT', 'CREATE'
      , 'CROSS', 'CURRENT', 'CURRENT_DATE', 'CURRENT_TIME'
      , 'CURRENT_TIMESTAMP', 'CURRENT_USER', 'CURSOR', 'DATABASE','DBCC'
      , 'DEALLOCATE', 'DECLARE', 'DEFAULT', 'DELETE', 'DENY', 'DESC'
      , 'DISK', 'DISTINCT', 'DISTRIBUTED', 'DOUBLE', 'DROP', 'DUMMY'
      , 'DUMP', 'ELSE', 'END', 'ERRLVL', 'ESCAPE', 'EXCEPT', 'EXEC'
      , 'EXECUTE', 'EXISTS', 'EXIT', 'FETCH', 'FILE', 'FILLFACTOR','FOR'
      , 'FOREIGN', 'FREETEXT', 'FREETEXTTABLE', 'FROM', 'FULL','FUNCTION'
      , 'GOTO', 'GRANT', 'GROUP', 'HAVING', 'HOLDLOCK', 'IDENTITY'
      , 'IDENTITY_INSERT', 'IDENTITYCOL', 'IF', 'IN', 'INDEX', 'INNER'
      , 'INSERT', 'INTERSECT', 'INTO', 'IS', 'JOIN', 'KEY', 'KILL','LEFT'
      , 'LIKE', 'LINENO', 'LOAD', 'NATIONAL', 'NOCHECK', 'NONCLUSTERED'
      , 'NOT', 'NULL', 'NULLIF', 'OF', 'OFF', 'OFFSETS', 'ON', 'OPEN'
      , 'OPENDATASOURCE', 'OPENQUERY', 'OPENROWSET', 'OPENXML','OPTION'
      , 'OR', 'ORDER', 'OUTER', 'OVER', 'PERCENT', 'PLAN', 'PRECISION'
      , 'PRIMARY', 'PRINT', 'PROC', 'PROCEDURE', 'PUBLIC', 'RAISERROR'
      , 'READ', 'READTEXT', 'RECONFIGURE', 'REFERENCES', 'REPLICATION'
      , 'RESTORE', 'RESTRICT', 'RETURN', 'REVOKE', 'RIGHT', 'ROLLBACK'
      , 'ROWCOUNT', 'ROWGUIDCOL', 'RULE', 'SAVE', 'SCHEMA', 'SELECT'
      , 'SESSION_USER', 'SET', 'SETUSER', 'SHUTDOWN', 'SOME','STATISTICS'
      , 'SYSTEM_USER', 'TABLE', 'TEXTSIZE', 'THEN', 'TO', 'TOP',       
      ,'TRANSACTION', 'TRIGGER', 'TRUNCATE', 'TSEQUAL', 'UNION','UNIQUE',    
      ,'UPDATE', 'UPDATETEXT', 'USE', 'USER', 'VALUES', 'VARYING','VIEW'
      , 'WAITFOR', 'WHEN', 'WHERE', 'WHILE', 'WITH', 'WRITETEXT')
THEN 1 ELSE 0 END
      RETURN @bitRETRUN
END

GO



-- To Check

CREATE TABLE My_KeyWordTable
   (
      [END]    char(10) NOT NULL ,
      [VALUES] char(10)  NULL ,
      [CROSS]  char(10)   NULL
   )


SELECT TABLE_NAME, COLUMN_NAME
FROM   INFORMATION_SCHEMA.COLUMNS
WHERE  1=dbo.fn_ChkKeyWord(COLUMN_NAME)