Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server sp_executesql不返回值_Sql Server_Tsql - Fatal编程技术网

Sql server sp_executesql不返回值

Sql server sp_executesql不返回值,sql-server,tsql,Sql Server,Tsql,我需要能够列出给定表的列列表。 当我运行以下命令时: 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

我需要能够列出给定表的列列表。 当我运行以下命令时:

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
我做错了什么

谢谢, 尤金

试试:

'...
    where TABLE_NAME = ''' + @TabName + '''
...'
或者(可能更好):


这些实际上只是注释中@Mikael Eriksson建议的实现。

您有名为
@SourceTable
的表吗?我的错,应该是@TabName。我做了一个改变。仍然不起作用。您需要将表名连接到动态查询中,或者将其作为参数传递。现在,它正在寻找一个名为
@TabName
的表,而它应该寻找
CT\u CONF
。只是尝试了“where table\u NAME=”CT\u CONF',仍然没有成功
'...
        where TABLE_NAME =  @TabName
...'
set @Params = N'@TabName varchar(100), @ColList varchar(Max) OUTPUT' 

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