如果表中不存在列,如何在动态SQL查询中传递默认值

时间:2018-07-12 05:38:53

标签: sql-server sql-server-2008 sql-server-2012 sql-server-2008-r2

我有一个动态SQL查询,该查询根据用户类型选择表名。 此处,“管理员”和“用户”表都有相似的列,但“管理员”表又有一个附加列“ Col4”。

现在,如果所选表是AdminTable,则需要传递此附加列值,否则我需要在下面的动态sql查询中传递默认的硬编码值。

是否有任何SQL关键字或任何简单的方法来实现此功能?

IF @UserType = 'Admin'                                                                                   
 SET @TableName = 'AdminTable'   
ELSE IF @UserType = 'User'                        
 SET @TableName = 'UserTable' 

SET @SqlQuery = 'SELECT Col1,Col2,Col3 FROM '+@TableName+' WITH(NOLOCK)'
EXEC (@SqlQuery) 

答案:以下一项对我有用。

SET @SqlQuery = 'SELECT Col1,Col2,Col3,Case When COL_LENGTH(''@TableName'', ''Col4'') IS NOT NULL THEN Col4 Else 0 END as AdminRole FROM '+@TableName+' WITH(NOLOCK)'
EXEC (@SqlQuery) 

2 个答案:

答案 0 :(得分:2)

IF @UserType = 'Admin'                                                                                   
 SET @SqlQuery = 'SELECT Col1,Col2,Col3,Col4 FROM '+@UserType+'Table'+' WITH(NOLOCK)'
ELSE IF @UserType = 'User'                        
 SET @SqlQuery = 'SELECT Col1,Col2,Col3 FROM ' +@UserType+'Table'+' WITH(NOLOCK)' 

EXEC (@SqlQuery) 

猜想您必须这样做,因为其中涉及到其他专栏。

答案 1 :(得分:1)

您可以简单地根据条件更改查询文本。

DECLARE @DefaultValue INT = 10
IF @UserType = 'Admin'
    SET @SqlQuery = 'SELECT Col1,Col2,Col3, Col4 FROM AdminTable WITH(NOLOCK)' ;    
ELSE IF @UserType = 'User'
    SET @SqlQuery = 'SELECT Col1,Col2,Col3, ' + CAST(@DefaultValue AS VARCHAR(10)) + ' as C4 ' + 'FROM UserTable WITH(NOLOCK)';


EXEC ( @SqlQuery );