在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]
感谢您提供的任何帮助或指示。
答案 0 :(得分:1)
我担心在SELECT语句中根本没有直接的方法可以做到这一点。但是,可以确定表中是否存在列,并相应地构造动态SQL。为此,请使用以下内容:
IF COL_LENGTH('schemaName.tableName', 'columnName') IS NOT NULL
BEGIN
-- Column Exists
END
然后,您可以将变量设置为标志,并且构造动态SQL的代码将根据需要构造具有/不具有列的表达式。另一种方法是使用字符串值,并将其设置为列名称(如果存在)(可能使用前缀或后缀逗号,视表达式而定)。这将允许您在表达式构建中保存写入条件,并且在动态表达式中包含多个或两个这些可能列的情况下特别有用。