日期:2014-05-18  浏览次数:20463 次

数据库名动态变化如何取出该库中某表的数据
我在数据库中建了一个作业,定时将数据库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语句解决