0

我有 10 个相同的数据库。

我在运行时获取数据库名称。

我想将行存储到对象集合中。

我也只想在数据库服务器上点击一次。

我目前的做法: -

  • 在查询中(由于 X 原因没有存储过程)我得到数据库列表并存储在临时表中。
  • 然后我遍历每个数据库并创建一个动态查询并执行它。

    DECLARE @MaxRownum int SET @MaxRownum = (SELECT MAX(RowNum) FROM #Databases) 
    DECLARE @Iter int SET @Iter = 1
    WHILE @Iter <= @MaxRownum
    BEGIN
    DECLARE @Database varchar(255) SELECT @Database = Databases FROM #Databases 
          WHERE RowNum = @Iter
    IF HAS_DBACCESS(@Database) > 0
        BEGIN 
          //appending query
    END
    SET @Iter = @Iter + 1
    END
    EXEC(@Query)
    

我可以使用 Linq + 实体框架一键访问服务器,无需动态查询且不影响性能吗?有没有更好的解决方案?

4

1 回答 1

1

不知道您的查询是什么(我问过但您没有提供),并且不确定您是否理解在没有“动态查询”的情况下将数据库名称作为变量提供非常困难,这是一种更简单的方法做到这一点恕我直言:

DECLARE @sql NVARCHAR(MAX);

SELECT @sql = N'';

SELECT @sql = @sql + CHAR(13) + CHAR(10) + 'UNION ALL'
    --// you will need to fill in your "//appending query" stuff here:
    + ' SELECT ... FROM ' + QUOTENAME(Databases) + '.dbo.tablename'
 FROM #Databases
 WHERE HAS_DBACCESS(Databases) = 1;

SET @sql = STUFF(@sql, 1, 9, '');

EXEC sp_executesql @sql;
于 2012-05-15T23:46:45.420 回答