Domanda

Ho appena scoperto, che da quando ho creato il mio DB su un server diverso che ha avuto un confronto diverso, poi emigrato a un nuovo server con nuove regole di confronto, ora continuo a avere problemi, e ho deciso di cambiare tutti i valori di il vecchio collazione.

Così ho provato ad eseguire questa query:

sp_configure "Allow Updates", 1
GO
RECONFIGURE WITH OVERRIDE
GO

UPDATE sys.columns SET collation_name = 
    'SQL_Latin1_General_CP1_CI_AS' WHERE collation_name = 'Hebrew_CI_AS'
GO

sp_configure "Allow Updates", 0
GO
RECONFIGURE
GO

Ma ecco l'output della query:

Configuration option 'allow updates' changed from 0 to 1. 
    Run the RECONFIGURE statement to install.

Msg 259, Level 16, State 1, Line 2
Ad hoc updates to system catalogs are not allowed.

Configuration option 'allow updates' changed from 1 to 0. 
    Run the RECONFIGURE statement to install.

Aggiorna
Secondo le risposte Soffietto, sto solo cercando un metodo automatico per eseguire l'azione.

È stato utile?

Soluzione 3

Questa query è genera uno script che scambiare tutte le colonne Hebrew_CI_AS raccolti a Latin1_General_CI_AS collazione:

DECLARE @Script varchar(MAX)
SET @Script = CAST((
SELECT 'ALTER TABLE [' + Tables.Name + '] ALTER COLUMN [' + 
  [Columns].Name + '] ' + Types.Name + '(' + 
  CAST([Columns].max_length AS varchar) + ') COLLATE Latin1_General_CI_AS ' + 
  CASE WHEN [Columns].is_nullable = 0 THEN 'NOT ' ELSE '' END + 'NULL '
FROM sys.tables Tables INNER JOIN sys.all_columns [Columns]
  ON [Tables].[object_id] = [Columns].[object_id]
  INNER JOIN sys.types Types ON [Columns].system_type_id = Types.system_type_id
WHERE [Columns].collation_name = 'Hebrew_CI_AS'
FOR XML PATH('')
) AS varchar(MAX))

PRINT @Script
EXEC(@Script)

Nota: per le colonne che sono indicizzati / vincolata avrete bisogno di modificare manualmente, ma questo è anche qualcosa dal momento che durante l'esecuzione della query sopra l'errore-risultato (per un vincolo ecc) contiene il tavolo e colonna del nome, si deve ammettere che è ancora meglio di fare tutto manualmente.

Altri suggerimenti

È necessario emettere comandi ALTER TABLE al fine di cambiare le regole di confronto delle colonne specifiche.

per es.

ALTER TABLE YourTable 
ALTER COLUMN ColA VARCHAR(10) COLLATE Latin1_General_CI_AS NOT NULL

questo riferimento MSDN

È possibile utilizzare alter table per cambiare le regole di confronto per ogni colonna.

L'unico modo per cambiare un confronto del database è quello di eliminare e ricreare il database.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top