2

そのため、tsqlコードを使用して多数のサーバーを実行し、各データベースでユーザーを探しています。特定のサーバーに、アクセスできず、使用する必要のないデータベースがあるという私の問題。クエリがそれらで実行されると、サーバー全体で停止し、次のサーバーに移動します。特定のデータベースを検索から除外する方法を見つけようとしています。

私がやろうとしているのは

たとえば、サーバーAでは、これらのデータベースB、C、Dなどを除外しました。<>と!=を試しましたが、機能しないか、構文が間違っています

USE MASTER

If OBJECT_ID('#TDB', 'U') > 0
Drop Table #TDB

DECLARE @dbname varchar(200),
        @sql varchar(max)

CREATE TABLE #TDB (
DataBaseName nvarchar(200), 
UserName nvarchar(200)
)

DECLARE db_cursor CURSOR FOR
SELECT name
FROM master.dbo.sysdatabases WHERE DBID>4
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @dbname
WHILE @@FETCH_STATUS = 0

BEGIN

SET @sql='insert into #TDb(DataBaseName,UserName)
select '''+@dbname+''' DataBaseName,[user_name] UserName FROM '+@dbname+'.[dbo].[USERS] where'+@dbname+'<>[APSSWATCH]' 

EXEC(@sql)

FETCH NEXT FROM db_cursor INTO @dbname

END

CLOSE db_cursor
DEALLOCATE db_cursor

SELECT * FROM #TDB ORDER BY DataBaseName,UserName
DROP TABLE #TDB
4

2 に答える 2

1
DECLARE db_cursor CURSOR FOR
SELECT name
FROM master.dbo.sysdatabases WHERE DBID>4 and name<> 'APSSWATCH'

これを削除できます:

where'+@dbname+'<>[APSSWATCH]'
于 2012-10-19T16:20:59.177 に答える
0

私を正しい方向に導いてくれてありがとう、

name<>'APPSWATCH'

使用しました

name NOT IN 'APPSWATCH'

そしてそれは動作します

于 2012-10-19T19:12:15.353 に答える