我有生产数据库(例如,PROD1)。它与另一个数据库有很多同义词(例如,PROD2)。

我创建了PROD2_TEST(作为PROD2的完整副本)和PROD1_TEST(作为PROD1的完整副本)。但是结果是我对PROD1_TEST使用了PROD2同义词,而不是PROD2_TEST

如何自动重新创建测试数据库的所有同义词?

最佳答案

基于@artm的建议,我对其进行了一点扩展,以包含一些参数以使其更通用。这是代码

DECLARE @newDB VARCHAR(MAX) = 'newDB',  --newDB to point the synonym to
    @linkedSrv VARCHAR(MAX) = null --if the synonym points to a linked server than specify it here like '[LinkedSrv].' (including the dot in the end)

SELECT  'Drop Synonym [' + SCHEMA_NAME(schema_id) + '].[' + PARSENAME(base_object_name, 1) + '];' AS dropSynonym,
        ' CREATE SYNONYM [' + SCHEMA_NAME(schema_id) + '].[' + UPPER(PARSENAME(base_object_name, 1)) + '] FOR '
        + COALESCE(@linkedSrv, '') + '[' + @newDB + '].[' + COALESCE(PARSENAME(base_object_name, 2),
                                                                     SCHEMA_NAME(SCHEMA_ID())) + '].['
        + UPPER(PARSENAME(base_object_name, 1)) + '];' AS createSynonym
FROM    sys.synonyms`

08-05 06:49