Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>You'll need to remove <code>WITH SCHEMABINDING</code> from your views and table-valued functions. To identify them you can query the <code>INFORMATION_SCHEMA</code> views:</p> <pre><code>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%' </code></pre> <ol> <li>First backup the database.</li> <li>Generate an <code>ALTER</code> script of all schema-bound views and functions.</li> <li>Delete the words "<code>WITH SCHEMABINDING</code>" from the script.</li> <li>Run the script a few times, until all reference errors are resolved.</li> <li>Change the collation on your database.</li> <li>Script and drop all constraints (keys, checks and defaults).</li> <li>Change the collation of each column using the script below.</li> <li>Recreate constraints.</li> <li>Finally, run the original script a few times to enable schema-binding.</li> </ol> <p>You can change the collation of all columns with this script:</p> <pre><code>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 &lt;&gt; @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 </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload