La procédure stockée suivante détermine dynamiquement les colonnes de la table spécifiée et renvoie toutes les colonnes qui ne sont pas nulles, cependant la procédure stockée renvoie des résultats nuls malgré les résultats obtenus lors du test de la requête dynamique seule, est-ce que je gère correctement le retour des résultats de la requête dynamique ?
CREATE PROCEDURE [dbo].[spGetTables]
(
@TableName varchar(255)
,@ParamOut varchar(2000) OUTPUT
)
AS
declare @CommaString varchar(max)
set @CommaString = ''
Declare @col varchar(255), @cmd nvarchar(max)
declare @colName varchar(2000)
SET @colName = ''
DECLARE getinfo cursor for
SELECT c.name FROM sys.tables t JOIN sys.columns c ON t.Object_ID = c.Object_ID
WHERE t.Name = @TableName
OPEN getinfo
FETCH NEXT FROM getinfo into @col
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @cmd = 'IF NOT EXISTS (SELECT top 1 * FROM [' + @TableName + '] WHERE [' + @col + '] IS NULL or len([' + @col + ']) < 1) BEGIN select ''' + @col + ','' END'
exec sp_executesql @cmd, N'@Result varchar(max) out', @ParamOut out
set @ParamOut = @ParamOut + @CommaString
FETCH NEXT FROM getinfo into @col
END
PRINT 'Result: '+@ParamOut
CLOSE getinfo
DEALLOCATE getinfo
RETURN 0