1

特定のテーブルの列のリストを作成できる必要があります。次を実行すると:

DECLARE @ColList Varchar(Max)
DECLARE @TabName varchar(100) = 'CT_CONF'

SELECT  @ColList =  CASE WHEN @ColList IS NULL THEN '''' ELSE @ColList + ',' END + column_name
                    from INFORMATION_SCHEMA.COLUMNS
                    where TABLE_NAME = @TabName
                      and DATA_TYPE not in ('xml','Text','Image','Geometry','Geography')
                      and COLUMN_NAME not in ('LAST_MODIFIED')
                    order by ordinal_position                   

select @ColList

必要な出力は得られますが、以下のように sp_executesql を実行しようとすると、何も返されません。

DECLARE @TabName varchar(100) = 'CT_CONF'

DECLARE @SQL NVarchar(Max)
DECLARE @ColList Varchar(Max)
Declare @Params nvarchar(Max)

SET @SQL = N'   
            select @ColList = CASE WHEN @ColList IS NULL THEN '''' ELSE @ColList + '','' END + column_name
                    from INFORMATION_SCHEMA.COLUMNS
                    where TABLE_NAME = ''@TabName ''
                      and DATA_TYPE not in (''xml'',''Text'',''Image'',''Geometry'',''Geography'')
                      and COLUMN_NAME not in (''LAST_MODIFIED'')
                    order by ordinal_position
            '

set @Params = N'@ColList varchar(Max) OUTPUT'

EXEC sp_executesql @SQL, @Params, @ColList OUTPUT

select @ColList

私は何を間違っていますか???

ありがとう、ユージーン

4

1 に答える 1

2

試す:

'...
    where TABLE_NAME = ''' + @TabName + '''
...'

または(おそらくより良い):

'...
        where TABLE_NAME =  @TabName
...'
set @Params = N'@TabName varchar(100), @ColList varchar(Max) OUTPUT' 

EXEC sp_executesql @SQL, @Params, @TabName, @ColList OUTPUT

これらは、コメント内の @Mikael Eriksson からの提案の単なる実装です。

于 2012-07-25T19:51:11.080 に答える