在Select语句中测试列

时间:2018-05-25 22:11:31

标签: sql-server-2016

在select语句中选择列之前是否可以测试列?

这对我来说可能很难解释,在过去的4个月里,我实际上不得不自学动态SQL。我使用动态生成的参数(@TableName)在循环中存储单个表(为模糊道歉,但细节并不相关)。

然后我希望能够有条件地从表中选择一列(我不知道每个表是否有某些列)。我已经想出了如何检查select语句之外的列...

SET @SQLQuery2 = 'Select @OPFolderIDColumnCheck = Column_Name From INFORMATION_SCHEMA.COLUMNS Where Table_Name = @TABLENAME And Column_Name = ''OP__FolderID'''
SET @ParameterDefinition2 = N'@TABLENAME VARCHAR(100), @OPFolderIDColumnCheck VARCHAR(100) OUTPUT'
EXECUTE SP_EXECUTESQL @SQLQuery2, @ParameterDefinition2, @TABLENAME, @OPFolderIDColumnCheck OUTPUT      

IF @OPFolderIDColumnCheck IS NULL
BEGIN           
    SET @OP__FOLDERID = NULL
END
ELSE
    IF @OPFolderIDColumnCheck IS NOT NULL
    BEGIN
        ...etc

但是id喜欢能够在select语句中执行它。有没有办法检查并查看表中是否存在OP__FOLDERID

我希望能够做到这样的事情:

SELECT IF 'OP__FOLDERID' EXISTS IN [TABLE] THEN 'OP__FOLDERID' FROM [TABLE]

感谢您提供的任何帮助或指示。

1 个答案:

答案 0 :(得分:1)

我担心在SELECT语句中根本没有直接的方法可以做到这一点。但是,可以确定表中是否存在列,并相应地构造动态SQL。为此,请使用以下内容:

IF COL_LENGTH('schemaName.tableName', 'columnName') IS NOT NULL
BEGIN
    -- Column Exists
END

然后,您可以将变量设置为标志,并且构造动态SQL的代码将根据需要构造具有/不具有列的表达式。另一种方法是使用字符串值,并将其设置为列名称(如果存在)(可能使用前缀或后缀逗号,视表达式而定)。这将允许您在表达式构建中保存写入条件,并且在动态表达式中包含多个或两个这些可能列的情况下特别有用。