sql >> データベース >  >> RDS >> Sqlserver

SQLServerデータベースの並べ替えの変更

    WITH SCHEMABINDINGを削除する必要があります ビューとテーブル値関数から。それらを識別するために、INFORMATION_SCHEMAにクエリを実行できます。 ビュー:

    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%'
    
    1. 最初にデータベースをバックアップします。
    2. ALTERを生成します スキーマにバインドされたすべてのビューと関数のスクリプト。
    3. WITH SCHEMABINDING」という単語を削除します 「スクリプトから。
    4. すべての参照エラーが解決されるまで、スクリプトを数回実行します。
    5. データベースの照合を変更します。
    6. すべての制約(キー、チェック、デフォルト)をスクリプト化して削除します。
    7. 以下のスクリプトを使用して、各列の照合を変更します。
    8. 制約を再作成します。
    9. 最後に、元のスクリプトを数回実行して、スキーマバインディングを有効にします。

    このスクリプトを使用して、すべての列の照合を変更できます。

    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
    


    1. Javaデスクトップアプリケーションをオンラインのmysqlデータベースに接続する方法は?

    2. 特定のユーザーが行を更新した場合にのみSQLトリガーを起動します

    3. OracleデータベースでPL/SQLブロック・メンバーとしてVARRAYを作成する方法

    4. VARCHARを主キーとして使用できますか?