You will need to remove WITH SCHEMABINDING from your views and table functions. To define them, you can query the INFORMATION_SCHEMA views:
SELECT TABLE_SCHEMA, TABLE_NAME AS VIEW_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE VIEW_DEFINITION LIKE '%SCHEMABINDING%' SELECT ROUTINE_SCHEMA, ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_DEFINITION LIKE '%SCHEMABINDING%'
- First back up the database.
- Generate an
ALTER script for all schema-related representations and functions. - Remove the words <
WITH SCHEMABINDING "from the script. - Run the script several times until all support errors are resolved.
- Change the setting in your database.
- Script and remove all restrictions (keys, checks, and default values).
- Change the sort order of each column using the script below.
- Restore restrictions.
- Finally, run the source script several times to enable schema binding.
You can change the sorting of all columns using this script:
DECLARE @collation nvarchar(128) DECLARE @commands table ([SQL] nvarchar(max)) DECLARE @cursor cursor DECLARE @sql nvarchar(max) SET @collation = 'SQL_Latin1_General_CP1_CI_AS' INSERT @commands ([SQL]) SELECT 'ALTER TABLE ' + QUOTENAME(c.TABLE_SCHEMA) +'.'+ QUOTENAME(c.TABLE_NAME) + ' ALTER COLUMN ' + QUOTENAME(c.COLUMN_NAME) + ' ' + c.DATA_TYPE + ISNULL('(' + LTRIM(STR(c.CHARACTER_MAXIMUM_LENGTH)) + ')', '') + ISNULL(' COLLATE ' + @collation, '') + ' ' + CASE c.IS_NULLABLE WHEN 'NO' THEN 'NOT ' ELSE '' END + 'NULL' FROM INFORMATION_SCHEMA.COLUMNS c INNER JOIN INFORMATION_SCHEMA.TABLES t ON t.TABLE_SCHEMA = c.TABLE_SCHEMA AND t.TABLE_NAME = c.TABLE_NAME WHERE t.TABLE_TYPE = 'BASE TABLE' AND c.COLLATION_NAME <> @collation SET @cursor = CURSOR FOR SELECT [SQL] FROM @commands OPEN @cursor FETCH NEXT FROM @cursor INTO @sql WHILE @@FETCH_STATUS = 0 BEGIN PRINT @sql EXEC (@sql) FETCH NEXT FROM @cursor INTO @sql END
Anthony Faull May 30 '10 at 13:34 2010-05-30 13:34
source share