如何在不使用动态SQL

时间:2016-04-07 13:47:30

标签: sql-server dynamic snapshot

我有一个现有的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拒绝。我宁愿采用一种不那么激进的解决方案。

有更好的想法吗?

0 个答案:

没有答案