J'espère que vous avez trouvé une bonne solution. J'ai eu le même problème, et la façon dont j'ai travaillé autour n'est probablement pas la meilleure mais ça marche maintenant.
il s'agit de créer un serveur lié et d'utiliser SQL dynamique - pas le meilleur, mais si quelqu'un peut suggérer quelque chose de mieux, s'il vous plaît commenter/répondre.
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
cela fonctionne pour moi maintenant. Je peux garantir que le nombre de colonnes et le type de colonnes retournées par la procédure stockée sont les mêmes que dans cette table, simplement parce que je retourne la même table de la procédure stockée.
Merci et salutations marcelo
Une possibilité de plus est que le collation DB sur votre La base de données TEMP et la base de données dans laquelle vous insérez ne correspondent pas. –