数据库名动态变化如何取出该库中某表的数据
我在数据库中建了一个作业,定时将数据库A中某表的数据抓取到数据库B中的某表中。
问题:数据A的名称每隔一天就会自动变化,作业就不会执行了(指定的表变成其他的了),有什么解决方法吗?
在系统数据库MASTER表中,可以查到所有数据库的信息,能否根据数据库ID,查询出该数据库,并将表中的数据取出来。
求高手解答。
[解决办法]
“数据A的名称每隔一天就会自动变化”
LZ应该知道变化规则吧?
按你的变化规则,写个动态执行的 存储过程不就OK了
作业调你的 存储过程
[解决办法]
楼主没说数据库A名称每天变化的规律(这个很重要),每天都变一般是带日期的吧?
以下语句应该可查询出来..
- SQL code
select name from master.dbo.sysdatabases where name like '[固有名称]%' and crdate>='[数据库建立时间]'
[解决办法]
- SQL code
select db_id('AcHerat')select db_name(11)/*************先获取你数据库的ID,然后按照ID去获取你现在的数据库名,估计作业里涉及到数据库名的药做成动态SQL
[解决办法]
14在数据库中拼字符串,也可以用参数
在实际的开发中,某些情况下在数据库中拼字符串不可避免,但又担心有特殊字符,导致拼出来的SQL有问题,其实数据库中拼字符串也可以使用参数,这就要用到dbo.sp_executesql ,这样就可以避免SQL注入和特殊字符导致的错误
如
DECLARE @IntVariable INT;--定义变量
DECLARE @SQLString NVARCHAR(500);--存储拼出来的SQL
DECLARE @ParmDefinition NVARCHAR(500);---存储拼出来的SQL中的参数
/* Build the SQL string one time. */
SET @SQLString =
N'SELECT * FROM AdventureWorks.Sales.Store WHERE SalesPersonID = @SalesID';
/* Specify the parameter format one time. */
SET @ParmDefinition = N'@SalesID int';--赋值
/* Execute the string with the first parameter value. */
SET @IntVariable = 275;--赋值
EXECUTE dbo.sp_executesql @SQLString, @ParmDefinition,
@SalesID = @IntVariable;
/* Execute the same string with the second parameter value. */
SET @IntVariable = 276;
EXECUTE dbo.sp_executesql @SQLString, @ParmDefinition,
@SalesID = @IntVariable;
[解决办法]
使用动态SQL语句解决