我使用以下代码删除并在我的数据库中创建同义词。
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。 DA的同义词,指向DA1。但我希望有一个if then语句,查看当前指向的位置,然后将指针更改为DA2,然后将DA3更改为DA3,然后在需要更改时返回DA1。
我在这里阅读了很多帖子,我可以自己更改同义词。但是为了节省我的时间,我需要改变它。
答案 0 :(得分:0)
这就是我需要做的事情并使其更加轻松。
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
我发布了我想出的内容,以免其他人遇到同样的问题,然后他们就不必经历我遇到的麻烦。