Here's a slightly better way to go than that horrific Cursor thing:
First create a scalar UDF like this:
/*
Returns a formatted string of all of the column names for the specified
Table or View, in order (probably).
*/
CREATE FUNCTION [dbo].[ColumnString]
(
@TableName As SYSNAME,
@Before As NVarchar(MAX) = N'',
@Between As NVarchar(MAX) = N', ',
@After As NVarchar(MAX) = N''
)
RETURNS NVarchar(MAX) AS
BEGIN
DECLARE @STR As NVarchar(MAX);
SELECT TOP 999
@STR = COALESCE(@str + @Between + @Before + COLUMN_NAME, @Before + COLUMN_NAME) + @After
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA= COALESCE(PARSENAME(@TableName, 2), N'dbo')
And TABLE_NAME = PARSENAME(@TableName, 1)
ORDER BY ORDINAL_POSITION
RETURN @STR;
END
Then create a stored procedure like this:
CREATE PROC dbo.WrapAllTables AS
DECLARE @sql As NVarchar(MAX);
SET @sql = N'';
SELECT @sql = @sql + '
IF EXISTS (SELECT * FROM sys.views
WHERE object_id = OBJECT_ID('''+TABLE_SCHEMA+'.vw_'+TABLE_NAME+'''))
DROP VIEW ['+TABLE_SCHEMA+']vw_.['+TABLE_NAME+'];
EXEC(''
CREATE VIEW ' + TABLE_SCHEMA + '.vw_' + TABLE_NAME + ' AS
SELECT '
+ dbo.ColumnString(TABLE_SCHEMA+'.'+TABLE_NAME, '
[', ',', ']')
+'
FROM '+ TABLE_SCHEMA +'.'+ TABLE_NAME + '
WITH SCHEMABINDING
'')
'
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
print 'EXECuting:'
print @sql
EXEC (@sql);
Execute this stored procedure to create all of your table wrapper views. If any of the table definitions change, then just re-execute this stored procedure. (I just run a SQL Agent Job that automatically re-executes these once a night).
[font="Times New Roman"]-- RBarryYoung[/font], [font="Times New Roman"] (302)375-0451[/font] blog: MovingSQL.com, Twitter: @RBarryYoung[font="Arial Black"]
Proactive Performance Solutions, Inc. [/font][font="Verdana"] "Performance is our middle name."[/font]