Sql server 在对case语句使用select*sys.synonyms时,删除并创建同义词

Sql server 在对case语句使用select*sys.synonyms时,删除并创建同义词,sql-server,tsql,Sql Server,Tsql,我使用以下代码在数据库中删除和创建同义词 select * from sys.synonyms DROP SYNONYM DATABASE1.BTXADDR; DROP SYNONYM DATABASE1.BTXSUPB; CREATE SYNONYM DATABASE1.BTXADDR FOR DATABASE2.DA2.BTXADDR; CREATE SYNONYM DATABASE1.BTXSUPB FOR DATEBASE2.DA3.BTXSUPB; TRUNCATE TA

我使用以下代码在数据库中删除和创建同义词

select * from sys.synonyms

DROP SYNONYM DATABASE1.BTXADDR;
DROP SYNONYM DATABASE1.BTXSUPB;
CREATE SYNONYM DATABASE1.BTXADDR FOR
  DATABASE2.DA2.BTXADDR;  
CREATE SYNONYM DATABASE1.BTXSUPB FOR
 DATEBASE2.DA3.BTXSUPB;

TRUNCATE TABLE DATABASE2.DA2.BTXADDR;
TRUNCATE TABLE DATABASE2.DA3.BTXSUPB;
INSERT INTO DATABASE2.DA3.BTXSUPB SELECT * FROM DATABASE2.DA2.BTXSUPB;
我遇到的问题是,我希望同义词指向不同的文件夹。文件夹是DA1、DA2、DA3。指向DA1的DA的同义词。但是我希望有一个if-then语句,它可以查看它当前指向的位置,然后将指针更改为DA2,然后更改为DA3,然后在需要更改它们时返回到DA1


我在这里读了很多帖子,我可以自己修改同义词。但从长远来看,为了节省时间,我需要改变它

这正是我需要做的,并且使它变得更容易

DECLARE @synName VARCHAR(100), @synTarget VARCHAR(150)

DECLARE Syns CURSOR FOR
SELECT  base_object_name
  FROM sys.synonyms 
  where name in ('BTXADDR', 'BTXSUPB') 
OPEN Syns
FETCH NEXT FROM Syns INTO @synName, @synTarget
WHILE @@FETCH_STATUS <> -1
BEGIN
 PRINT 'DROP SYNONYM ' + @synName
 SET @synTarget = CASE 
                   WHEN @synTarget LIKE '%[DA2]%' THEN REPLACE(@synTarget,'[DA2]','[DA3]')
                   WHEN @synTarget LIKE '%[DA3]%' THEN REPLACE(@synTarget,'[DA3]','[DA1]')
                   WHEN @synTarget LIKE '%[DA1]%' THEN REPLACE(@synTarget,'[DA1]','[DA2]')
              END
 PRINT 'CREATE SYNONYM ' + @synName + ' FOR ' +@synTarget
 FETCH NEXT FROM Syns INTO @synName, @synTarget
END
CLOSE Syns
DEALLOCATE Syns

我正在发布我的想法,以防其他人有相同的问题,那么他们就不必经历我所经历的麻烦。

好的,我确保我这样做了,所以它位于正确的区域,我可以将sql server标记添加回它。这是你的问题,如果它与该产品无关,那么就不要添加它。如果是这样的话,也许会有助于让你的问题变得更加明显?这取决于你,我不知道sql server。