有一个被很多地方引用导致没办法修改:Cannot ALTER 'dbo.F_GetLocalDate' because it is being referenced by object 'DF_mms_member_AddDate'.

网上没找到合适方法,发挥自己动手丰衣足食的传统
首先理一下思路:

1,先把引用到方法的地方修改掉

2,修改方法

3,引用到方法的地方修改回来

嗯,说干就干

-------------------------------------------华丽的分割线--------------------------------------------------

-- 欲查詢之schema, function

declare @pSchemaName varchar(30) = '',
@pFunctionName varchar(30) = ''

select 
    LiteralCheckOrDefault,
    s.Name as SchemaName,
    t.Name as TableName,
    cn.Name as ConstraintName,
    cl.Name as ColumnName,
    Definition
into #cnTemp
from (
select 'check' as LiteralCheckOrDefault, 
Name, Definition, parent_object_id, parent_column_id 
from sys.check_constraints
union all
select 'default' as LiteralCheckOrDefault, 
Name, Definition, parent_object_id, parent_column_id 
from sys.default_constraints
) cn
inner join sys.columns cl
on cn.parent_object_id = cl.object_id AND
    cn.parent_column_id = cl.column_id
inner join sys.tables t
on t.object_id = cl.object_id
inner join sys.schemas S
on t.schema_id = s.schema_id
where definition like '%'+@pSchemaName+'%'+@pFunctionName+'%'
order by SchemaName, TableName, ColumnName, ConstraintName

-- 建立刪除語法
select 'alter table [' + SchemaName + '].[' + TableName + '] ' +
'drop constraint [' + ConstraintName + '];' as Drop_Command
,SchemaName
,TableName
,ColumnName
,ConstraintName
,Definition
from #cnTemp
order by SchemaName ,TableName ,ColumnName

-- 執行function修改
-- 將約束條件建回
select 'alter table [' + SchemaName + '].[' + TableName + '] ' + 
'add constraint [' + ConstraintName + '] ' + LiteralCheckOrDefault + ' ' + 
Definition + 
iif(LiteralCheckOrDefault = 'default', ' for [' + ColumnName+ ']', '') + ';' as ADD_Command  
from #cnTemp
order by SchemaName ,TableName ,ColumnName

drop table #cnTemp

------------------------------------F_GetLocalDate------------------------------------------------------

ALTER FUNCTION [dbo].[F_GetLocalDate]

(
    @TimezoneDiffInHour TINYINT = 8
)

RETURNS DATETIME

AS

BEGIN
    declare @result datetime
    set @result=''
select @result=DATEADD(Hh, @TimezoneDiffInHour , GETUTCDATE())
RETURN @result
END

欢迎转载,请注明来自白菜卖故事>>本文地址:http://www.bcmgs.com/786

0 还没人赞过...