Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何正确重命名所有未命名的默认约束_Sql Server - Fatal编程技术网

Sql server 如何正确重命名所有未命名的默认约束

Sql server 如何正确重命名所有未命名的默认约束,sql-server,Sql Server,使用SQL Server 2014:我正在处理一个大型生产数据库,其中包含许多未命名的默认约束 未命名的默认约束会导致许多问题,因为它们在我填充数据库模式填充脚本的每个“DEV”或“QA”环境中都会得到一个随机名称。随机默认约束名称导致SSDT架构比较/更新脚本失败 我需要正确地将生产数据库的默认列约束命名为正确的名称,以便在编写数据库架构脚本时,它们不会得到随机名称 我使用以下查询获取未命名默认约束的列表: select t.name, c.name, d.name, definit

使用SQL Server 2014:我正在处理一个大型生产数据库,其中包含许多未命名的默认约束

未命名的默认约束会导致许多问题,因为它们在我填充数据库模式填充脚本的每个“DEV”或“QA”环境中都会得到一个随机名称。随机默认约束名称导致SSDT架构比较/更新脚本失败

我需要正确地将生产数据库的默认列约束命名为正确的名称,以便在编写数据库架构脚本时,它们不会得到随机名称

我使用以下查询获取未命名默认约束的列表:

select 
    t.name, c.name, d.name, definition 
from 
    sys.tables t   
join    
    sys.default_constraints d on d.parent_object_id = t.object_id  
join    
    sys.columns c on c.object_id = t.object_id      
                  and c.column_id = d.parent_column_id
其中有100个:(

是否有任何“安全”的方法将所有未命名的默认约束重命名为一个正确的名称,使得它们不考虑“未命名”,并且在每个环境中都没有得到一个随机名称? 我想扩展上面的查询并生成

sp_rename
语句。因为我处理的是生产数据库,所以我想找到最安全的方法


解决此问题最可靠和最安全的方法是什么?

您可以使用
sp\u rename
使用
@objtype='OBJECT'


这适用于sys.objects中列出的对象,其中包括约束

以下是适用于我的脚本:

select
    CONCAT
    (
        'exec sp_rename ',
        '   @objname = ''['+d.name+']''',
        ' , @newname =  ''DF_',t.name,'_',c.name,   '''',
        ' , @objtype = ''OBJECT'' ;'
    ), 
    t.name, c.name, d.name, definition 
from 
    sys.tables t   
join    
    sys.default_constraints d on d.parent_object_id = t.object_id  
join    
    sys.columns c on c.object_id = t.object_id      
                  and c.column_id = d.parent_column_id
ORDER BY t.name

只需将结果的第1列粘贴到一个新的查询窗口中,用
开始事务
回滚
将其包围起来进行测试。

继续,生成那些重命名语句。