Merhaba geçtiğimiz günlerde SQL sunucusunu yeni bir makinaya taşıdık.
Taşıdıktan sonra tedadüfen bir Stored Prosedür’de hata aldığını farkettim.
Hatanın sebebi yeni SQL’deki karakter kodlamasının farklı olmasıydı. (COLLATION)
İçime bir kurt düştü. Acaba bu şekilde olan başka SP, Trigger vs var mıdır, varsa nasıl kontrol ederim diye düşündüm.
Biraz araştırınca aşağıdaki scripti buldum.
Çok işime yaradı sizlere de faydası olabilir diyerek paylaşıyorum:
https://stackoverflow.com/a/34169397/1068246
DECLARE @Name nvarchar(1000);
DECLARE @Sql nvarchar(1000);
DECLARE @Result int;
DECLARE ObjectCursor CURSOR FAST_FORWARD FOR
SELECT QUOTENAME(SCHEMA_NAME(o.schema_id)) + '.' + QUOTENAME(OBJECT_NAME(o.object_id))
FROM sys.objects o
WHERE type_desc IN (
'SQL_STORED_PROCEDURE',
'SQL_TRIGGER',
'SQL_SCALAR_FUNCTION',
'SQL_TABLE_VALUED_FUNCTION',
'SQL_INLINE_TABLE_VALUED_FUNCTION',
'VIEW')
--include the following if you have schema bound objects since they are not supported
AND ISNULL(OBJECTPROPERTY(o.object_id, 'IsSchemaBound'), 0) = 0;
OPEN ObjectCursor;
FETCH NEXT FROM ObjectCursor INTO @Name;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Sql = N'EXEC sp_refreshsqlmodule ''' + @Name + '''';
BEGIN TRY
EXEC @Result = sp_executesql @Sql;
IF @Result <> 0
RAISERROR ('Failed', 16, 1);
END TRY
BEGIN CATCH
PRINT 'The module ''' + @Name + ''' does not compile.';
IF @@trancount > 0
ROLLBACK TRANSACTION;
END CATCH
FETCH NEXT FROM ObjectCursor INTO @Name;
END
Selamlar.
Sonuna;
CLOSE ObjectCursor;
DEALLOCATE ObjectCursor;
eklemekte fayda var.