我有一个动态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)
答案 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 );