我在存储过程(SP)中使用同义词在链接数据库上运行select。数据库名称是根据SP的输入计算的。 SP在大多数情况下工作正常,但如果通过程序多次调用相同的SP,我会收到错误 -
无效的对象名称Synonym_Name
重新启动应用程序修复了错误 - 但这是通过服务调用触发的,这是不可接受的。
在启动SP时,我已经注意检查对象是否存在,如果是,则删除它,然后创建它 -
IF EXISTS(select * from sys.synonyms s where name = 'Synonym_Name' )
BEGIN
DROP SYNONYM [dbo].[Synonym_Name]
END
EXEC ('CREATE SYNONYM [dbo].[Synonym_Name] FOR ' + @DB + '.[dbo].[TableName]')
如何避免此无效对象名称错误?
根据我在所有论坛上阅读的内容,没有特定的ID,任何人都可以删除同义词。有没有其他方法来处理这种情况,因为表名后来被引用到多个位置 - 从表中选择插入,变量赋值等。
我不确定这个问题是否已经涵盖 - 我确实搜索过并且无法找到任何问题。