Here's a "creative" example that uses dynamic SQL and temp tables. I'm sure
it can be improved a lot, but I'm kinda tired right now... Enjoy...
DECLARE @server1 VARCHAR(255)
DECLARE @server2 VARCHAR(255)
DECLARE @database VARCHAR(255)
SELECT @server1 = 'myserver1'
SELECT @server2 = 'myserver2'
SELECT @database = 'mydatabase'
CREATE TABLE #tables_counts1 (num INT NOT NULL IDENTITY(1,1),
server VARCHAR(255) NOT NULL,
[name] VARCHAR(255) NOT NULL,
counts BIGINT,
PRIMARY KEY (server, [name]))
CREATE TABLE #tables_counts2 (num INT NOT NULL IDENTITY(1,1),
server VARCHAR(255) NOT NULL,
[name] VARCHAR(255) NOT NULL,
counts BIGINT,
PRIMARY KEY (server, [name]))
DECLARE @sql VARCHAR(4000)
SELECT @sql = 'INSERT INTO #tables_counts1 (server, [name]) ' +
'SELECT ''' + QUOTENAME(@server1) + ''', [name] ' +
'FROM ' + QUOTENAME(@server1) + '.' + QUOTENAME(@database) +
'.dbo.sysobjects ' +
'WHERE xtype = ''u'''
EXEC (@sql)
DECLARE @i INT
SELECT @i = 1
WHILE @i <= (SELECT MAX(num) FROM #tables_counts1)
BEGIN
SELECT @sql = 'UPDATE #tables_counts1 ' +
'SET counts = ( ' +
'SELECT COUNT(*) FROM ' + QUOTENAME(@server1) + '.' +
QUOTENAME(@database) + '.dbo.' + [name] + ') ' +
'WHERE num = ' + CAST(@i AS VARCHAR(32))
FROM #tables_counts1
WHERE num = @i
EXEC (@sql)
PRINT @sql
PRINT @i
SELECT @i = @i + 1
END
SELECT @sql = 'INSERT INTO #tables_counts2 (server, [name]) ' +
'SELECT ''' + QUOTENAME(@server2) + ''', [name] ' +
'FROM ' + QUOTENAME(@server2) + '.' + QUOTENAME(@database) +
'.dbo.sysobjects ' +
'WHERE xtype = ''u'''
EXEC (@sql)
SELECT @i = 1
WHILE @i <= (SELECT MAX(num) FROM #tables_counts2)
BEGIN
SELECT @sql = 'UPDATE #tables_counts2 ' +
'SET counts = ( ' +
'SELECT COUNT(*) FROM ' + QUOTENAME(@server2) + '.' +
QUOTENAME(@database) + '.dbo.' + [name] + ') ' +
'WHERE num = ' + CAST(@i AS VARCHAR(32))
FROM #tables_counts2
WHERE num = @i
EXEC (@sql)
PRINT @sql
PRINT @i
SELECT @i = @i + 1
END
SELECT *
FROM #tables_counts1 t1
FULL OUTER JOIN
#tables_counts2 t2
ON t1.[name] = t2.[name]
DROP TABLE #tables_counts2
DROP TABLE #tables_counts1
[quoted text, click to view] "Chris" <Chris@discussions.microsoft.com> wrote in message
news:7E3AF895-21EC-4A04-8C5D-3404E779205D@microsoft.com...
>I have a cursor that pulls the name of the tables one by one on my server
>and
> I need to use it in a sql statement to compare the counts to the same
> table
> names in another server. How can I get the Cursor that holds the name of
> the
> table to work in the from clause? It keeps giving me an error.
>
> See below
>
> USE reportingcurrent
> GO
>
> Declare @Table varchar(100)
> Declare @RepCur varchar(50)
> Declare @Stag varchar(50)
>
> Set @repCur = 'reportingcurrent.dbo.'
> Set @Stag = 'staging.dbo.'
>
> DECLARE TableName1 CURSOR FOR
> SELECT [name]
> FROM sysobjects
> where reportingcurrent.dbo.sysobjects.xtype = 'u'
> order by [name]
>
> OPEN TableName1
> --GO
>
> FETCH NEXT FROM TableName1
> into @Table
> --GO
>
> WHILE @@FETCH_STATUS = 0
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------
> BEGIN
> If (Select Count(1) from reportingcurrent.dbo.TableName1) >
> (Select Count(1) from staging.dbo.TableName1)
> Begin
> Truncate Table DateTimeStamp
> insert into reportingcurrent.dbo.datetimestamp
> values (@Table, GetDate()-1)
> End
> Else
> Print 'False'
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------
> FETCH NEXT FROM TableName1
> Into @Table
> END
>
> CLOSE TableName1
> DEALLOCATE TableName1
> GO
>
> here is my error message
>
> Server: Msg 208, Level 16, State 1, Line 25
> Invalid object name 'reportingcurrent.dbo.TableName1'.
> Server: Msg 208, Level 16, State 1, Line 25
> Invalid object name 'staging.dbo.TableName1'.
>
>
> Any and all help is appreciated.
>
> Thanks
>
> -Chris
>