There is no reason why your approach is not working. Check again at your code :
SQL Fiddle
MS SQL Server 2008 Schema Setup:
CREATE TABLE INTERFACE
([ID] int,
[COL1] varchar(2),
[COL2] varchar(2),
[COL3] varchar(2),
[COL4] varchar(2),
[CASENO] int,
[INTLINENO] int,
[INTMEMBNO] int,
[INTSTATUS] int,
[RECTYPE] varchar(2),
[EFFDTE] date,
[INTERR] int,
[INTERR2] int,
[INTWARN] int,
[AUTHORISED] varchar(12),
[EXCLUDE] varchar(10),
[UPDATED] varchar(6),
[INTMEMBNO2] int,
[INTSTATUS2] int,
[ALTKEY] varchar(12),
[COL5] varchar(2))
;
Query 1:
DECLARE @excludeFieldTable TABLE
(
excludeFieldName varchar(100)
)
INSERT INTO @excludeFieldTable VALUES
('CASENO'),('INTLINENO'),('INTMEMBNO'),('INTSTATUS'),
('RECTYPE'),('EFFDTE'),('INTERR'),('INTERR2'),
('INTWARN'),('AUTHORISED'),('EXCLUDE'),('UPDATED'),
('INTMEMBNO2'),('INTSTATUS2'),('ALTKEY')
DECLARE @intColumnList TABLE
(
columnList varchar(100)
)
INSERT INTO @intColumnList
SELECT DISTINCT(COLUMN_NAME)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='INTERFACE' AND
COLUMN_NAME NOT IN (SELECT DISTINCT(excludeFieldName) FROM @excludeFieldTable)
SELECT *
FROM @intColumnList
Results:
| COLUMNLIST |
|------------|
| COL1 |
| COL2 |
| COL3 |
| COL4 |
| COL5 |
| ID |
EDITED :
With a string, it can look like this :
Query 2:
DECLARE @excludeFieldTable VARCHAR(1000)
SET @excludeFieldTable = 'CASENO, INTLINENO, INTMEMBNO, INTSTATUS, RECTYPE, EFFDTE, INTERR, INTERR2, INTWARN, AUTHORISED, EXCLUDE, UPDATED, INTMEMBNO2, INTSTATUS2, ALTKEY'
DECLARE @intColumnList TABLE
(
columnList varchar(100)
)
INSERT INTO @intColumnList
SELECT DISTINCT(COLUMN_NAME)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='INTERFACE' AND
', '+@excludeFieldTable+', ' NOT LIKE '%, '+COLUMN_NAME+', %'
SELECT *
FROM @intColumnList
Results:
| COLUMNLIST |
|------------|
| COL1 |
| COL2 |
| COL3 |
| COL4 |
| COL5 |
| ID |
RE-EDITED :
SP working fine also :
Query 3:
CREATE PROCEDURE ExcludeField1 AS
DECLARE @excludeFieldTable VARCHAR(1000)
SET @excludeFieldTable = 'CASENO, INTLINENO, INTMEMBNO, INTSTATUS, RECTYPE, EFFDTE, INTERR, INTERR2, INTWARN, AUTHORISED, EXCLUDE, UPDATED, INTMEMBNO2, INTSTATUS2, ALTKEY'
DECLARE @intColumnList TABLE
(
columnList varchar(100)
)
INSERT INTO @intColumnList
SELECT DISTINCT(COLUMN_NAME)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='INTERFACE' AND
', '+@excludeFieldTable+', ' NOT LIKE '%, '+COLUMN_NAME+', %'
SELECT * FROM @intColumnList
Results:
Query 4:
CREATE PROCEDURE ExcludeField2 AS
DECLARE @excludeFieldTable TABLE
(
excludeFieldName varchar(100)
)
INSERT INTO @excludeFieldTable VALUES
('CASENO'),('INTLINENO'),('INTMEMBNO'),('INTSTATUS'),
('RECTYPE'),('EFFDTE'),('INTERR'),('INTERR2'),
('INTWARN'),('AUTHORISED'),('EXCLUDE'),('UPDATED'),
('INTMEMBNO2'),('INTSTATUS2'),('ALTKEY')
DECLARE @intColumnList TABLE
(
columnList varchar(100)
)
INSERT INTO @intColumnList
SELECT DISTINCT(COLUMN_NAME)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='INTERFACE' AND
COLUMN_NAME NOT IN (SELECT DISTINCT(excludeFieldName) FROM @excludeFieldTable)
SELECT * FROM @intColumnList
Results:
Query 5:
EXEC ExcludeField1
Results:
| COLUMNLIST |
|------------|
| COL1 |
| COL2 |
| COL3 |
| COL4 |
| COL5 |
| ID |
Query 6:
EXEC ExcludeField2
Results:
| COLUMNLIST |
|------------|
| COL1 |
| COL2 |
| COL3 |
| COL4 |
| COL5 |
| ID |
If you want to define the exclude string before, it will look like this :
Query 7:
CREATE PROCEDURE ExcludeField1 @excludeFieldString varchar(1000) AS
DECLARE @intColumnList TABLE
(
columnList varchar(100)
)
INSERT INTO @intColumnList
SELECT DISTINCT(COLUMN_NAME)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='INTERFACE' AND
', '+@excludeFieldString+', ' NOT LIKE '%, '+COLUMN_NAME+', %'
SELECT * FROM @intColumnList
Results:
Query 8:
DECLARE @excludeFieldTable VARCHAR(1000)
SET @excludeFieldTable = 'CASENO, INTLINENO, INTMEMBNO, INTSTATUS, RECTYPE, EFFDTE, INTERR, INTERR2, INTWARN, AUTHORISED, EXCLUDE, UPDATED, INTMEMBNO2, INTSTATUS2, ALTKEY'
EXEC ExcludeField1 @excludeFieldString = @excludeFieldTable
Results:
| COLUMNLIST |
|------------|
| COL1 |
| COL2 |
| COL3 |
| COL4 |
| COL5 |
| ID |