Ich hoffe, Sie haben eine gute Lösung gefunden. Ich hatte das gleiche Problem, und die Art und Weise, wie ich daran arbeitete, ist wahrscheinlich nicht die beste, aber es funktioniert jetzt.
es beinhaltet die Schaffung eines Verbindungsservers und die Verwendung von dynamischen SQL - nicht die beste, aber wenn jemand etwas besser vorschlagen kann, bitte Kommentar/Antwort.
declare @sql nvarchar(max)
DECLARE @DB_SPACE TABLE (
[DatabaseName] NVARCHAR(128) NOT NULL,
[FILEID] [smallint] NOT NULL,
[FILE_SIZE_MB] INT NOT NULL DEFAULT (0),
[SPACE_USED_MB] INT NULL DEFAULT (0),
[FREE_SPACE_MB] INT NULL DEFAULT (0),
[LOGICALNAME] SYSNAME NOT NULL,
[DRIVE] NCHAR(1) NOT NULL,
[FILENAME] NVARCHAR(260) NOT NULL,
[FILE_TYPE] NVARCHAR(260) NOT NULL,
[THE_AUTOGROWTH_IN_KB] INT NOT NULL DEFAULT(0)
,filegroup VARCHAR(128)
,maxsize VARCHAR(25)
PRIMARY KEY CLUSTERED ([DatabaseName] ,[FILEID])
)
SELECT @SQL ='SELECT [DatabaseName],
[FILEID],
[FILE_SIZE_MB],
[SPACE_USED_MB],
[FREE_SPACE_MB],
[LOGICALNAME],
[DRIVE],
[FILENAME],
[FILE_TYPE],
[THE_AUTOGROWTH_IN_KB]
,filegroup
,maxsize FROM OPENQUERY('+ QUOTENAME('THE_MONITOR') + ','''+ ' EXEC MASTER.DBO.monitoring_database_details ' +''')'
exec sp_executesql @sql
INSERT INTO @DB_SPACE(
[DatabaseName],
[FILEID],
[FILE_SIZE_MB],
[SPACE_USED_MB],
[FREE_SPACE_MB],
[LOGICALNAME],
[DRIVE],
[FILENAME],
[FILE_TYPE],
THE_AUTOGROWTH_IN_KB,
[filegroup],
maxsize
)
EXEC SP_EXECUTESQL @SQL
das funktioniert jetzt für mich. Ich kann garantieren, dass die Anzahl der Spalten und die Art der Spalten, die von der gespeicherten Prozedur zurückgegeben werden, dieselben sind wie in dieser Tabelle, weil ich die gleiche Tabelle aus der gespeicherten Prozedur zurückgebe.
Danke und Grüße marcelo
Eine weitere Möglichkeit ist, dass die DB-Kollatierung auf Ihrem TEMP DB und der DB, in den Sie einfügen, stimmen nicht überein. –