我有一个现有的SP。 我想在某些情况下开始使用数据库快照。 用户可以随时保存快照。 如果他们这样做,SP应该使用它。 否则,请使用主数据库。
我希望通过使数据库/表名称动态而不是在SP中进行硬编码来调整SP来处理这个问题。
我可以想象这样的工作,使用完全限定的表名,但它会给出错误'必须声明表变量'@ db1“':
declare @table1 varchar(25);
set @table1 = Snapshot.schema.tablename;
select * from @table1;
这会在'@db'附近显示“语法错误。”
declare @db varchar(25);
set @db = "Snapshot";
use @db;
这种方法有效,但“使用”仅在执行期间有效。在执行'select'时,您将返回使用原始数据库。
declare @db varchar(25);
set @db = 'use Snapshot';
EXECUTE(@db);
select * from Schema.Tablename;
我知道我可以动态生成整个SP,但这似乎可以保证被DBA拒绝。我宁愿采用一种不那么激进的解决方案。
有更好的想法吗?