La sostituzione NON avviene in automatico, ma avrete come risultato tutte le query di sostituzione necessarie :
DECLARE @SearchStr nvarchar(MAX) SET @SearchStr = 'text to search' DECLARE @ReplaceStr nvarchar(MAX) SET @ReplaceStr = 'replace text' CREATE TABLE #Results ( TableName nvarchar(370), ColumnName nvarchar(370), ColumnValue nvarchar(MAX)) SET NOCOUNT ON DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110) SET @TableName = '' SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''') WHILE @TableName IS NOT NULL BEGIN SET @ColumnName = '' SET @TableName = ( SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName AND OBJECTPROPERTY( OBJECT_ID( QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) ), 'IsMSShipped' ) = 0 ) WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL) BEGIN SET @ColumnName = ( SELECT MIN(QUOTENAME(COLUMN_NAME)) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2) AND TABLE_NAME = PARSENAME(@TableName, 1) AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar', 'ntext') AND QUOTENAME(COLUMN_NAME) > @ColumnName ) IF @ColumnName IS NOT NULL BEGIN INSERT INTO #Results EXEC ( 'SELECT ''' + @TableName + '''' + ', ''' + @ColumnName + ''', CONVERT(NVARCHAR(MAX), ' + @ColumnName + ') FROM ' + @TableName + ' (NOLOCK) ' + ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2 ) END END END SELECT DISTINCT 'UPDATE ' + TableName + ' SET ' + ColumnName + ' = REPLACE(CONVERT(NVARCHAR(MAX), ' + ColumnName + '), ''' + @SearchStr + ''', ''' + @ReplaceStr + ''' )' FROM #Results DROP TABLE #Results
Questo script mi è sempre risultato molto utile per sostituire link che tra il mio ambiente di sviluppo e quello di produzione sono diversi.
Nessun commento:
Posta un commento