SQL Nesnelerini Kontrol Etme | MsSql

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.

Leave a Reply

Your email address will not be published.