Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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 为员工获取不同的范围_Sql Server_Tsql - Fatal编程技术网

Sql server 为员工获取不同的范围

Sql server 为员工获取不同的范围,sql-server,tsql,Sql Server,Tsql,我使用如下动态查询检索员工的不同角色/范围: DECLARE @roles NVARCHAR(MAX)='' DECLARE @table TABLE ( Scope NVARCHAR(MAX) ) SELECT @roles=@roles+ 'Select '+isnull(er.ColumnName,'*')+' from '+er.SchemaName+'.'+er.TableName+' where '+kcu.COLUMN_

我使用如下动态查询检索员工的不同角色/范围:

  DECLARE @roles NVARCHAR(MAX)=''
        DECLARE @table TABLE
    (
        Scope NVARCHAR(MAX)
    )

    SELECT @roles=@roles+ 'Select '+isnull(er.ColumnName,'*')+' from '+er.SchemaName+'.'+er.TableName+' where '+kcu.COLUMN_NAME +'='+er1.ValueId 


       from [Function].[Role] er 
        left join INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc on 
            tc.TABLE_NAME=er.TableName and tc.TABLE_SCHEMA=er.SchemaName
       left join INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu on kcu.CONSTRAINT_NAME=tc.CONSTRAINT_NAME
        left JOIN Employee_Role er1 ON er.EntityRoleId = er1.RoleId
        left  JOIN Employee e ON er1.EmployeeId = e.EmployeeId
    where e.EmployeeId=54 AND tc.CONSTRAINT_TYPE='PRIMARY KEY' AND er1.ValueId !=0 AND er1.ValueId IS NOT NULL

    INSERT INTO @table(Scope)
  EXEC sp_executesql @roles;

  SELECT * FROM @table
DECLARE @roles NVARCHAR(MAX)=''
    DECLARE @table TABLE
(
    Scope NVARCHAR(MAX)
)

    SELECT  e.EmployeeId,

'Select '+isnull(er.ColumnName,'*')+' from '+er.SchemaName+'.'+er.TableName+' where '+kcu.COLUMN_NAME +'='+er1.ValueId 


       from [Function].[Role] er 
        left join INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc on 
            tc.TABLE_NAME=er.TableName and tc.TABLE_SCHEMA=er.SchemaName
       left join INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu on kcu.CONSTRAINT_NAME=tc.CONSTRAINT_NAME
        left JOIN Employee_Role er1 ON er.EntityRoleId = er1.RoleId
        left  JOIN Employee e ON er1.EmployeeId = e.EmployeeId
    where e.EmployeeId=54 AND tc.CONSTRAINT_TYPE='PRIMARY KEY' AND er1.ValueId !=0 AND er1.ValueId IS NOT NULL

    INSERT INTO @table(Scope)
  EXEC sp_executesql @roles;

  SELECT * FROM @table
这是我的输出:

当我尝试显示带有角色(范围)的
员工ID
时,如下所示:

  DECLARE @roles NVARCHAR(MAX)=''
        DECLARE @table TABLE
    (
        Scope NVARCHAR(MAX)
    )

    SELECT @roles=@roles+ 'Select '+isnull(er.ColumnName,'*')+' from '+er.SchemaName+'.'+er.TableName+' where '+kcu.COLUMN_NAME +'='+er1.ValueId 


       from [Function].[Role] er 
        left join INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc on 
            tc.TABLE_NAME=er.TableName and tc.TABLE_SCHEMA=er.SchemaName
       left join INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu on kcu.CONSTRAINT_NAME=tc.CONSTRAINT_NAME
        left JOIN Employee_Role er1 ON er.EntityRoleId = er1.RoleId
        left  JOIN Employee e ON er1.EmployeeId = e.EmployeeId
    where e.EmployeeId=54 AND tc.CONSTRAINT_TYPE='PRIMARY KEY' AND er1.ValueId !=0 AND er1.ValueId IS NOT NULL

    INSERT INTO @table(Scope)
  EXEC sp_executesql @roles;

  SELECT * FROM @table
DECLARE @roles NVARCHAR(MAX)=''
    DECLARE @table TABLE
(
    Scope NVARCHAR(MAX)
)

    SELECT  e.EmployeeId,

'Select '+isnull(er.ColumnName,'*')+' from '+er.SchemaName+'.'+er.TableName+' where '+kcu.COLUMN_NAME +'='+er1.ValueId 


       from [Function].[Role] er 
        left join INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc on 
            tc.TABLE_NAME=er.TableName and tc.TABLE_SCHEMA=er.SchemaName
       left join INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu on kcu.CONSTRAINT_NAME=tc.CONSTRAINT_NAME
        left JOIN Employee_Role er1 ON er.EntityRoleId = er1.RoleId
        left  JOIN Employee e ON er1.EmployeeId = e.EmployeeId
    where e.EmployeeId=54 AND tc.CONSTRAINT_TYPE='PRIMARY KEY' AND er1.ValueId !=0 AND er1.ValueId IS NOT NULL

    INSERT INTO @table(Scope)
  EXEC sp_executesql @roles;

  SELECT * FROM @table
我的输出是空的。 预期产出:


在第二个查询中,您遗漏了以下内容:

...@roles=@roles+ ...

在第二个查询中,您遗漏了以下内容:

...@roles=@roles+ ...

我认为这与数据有关。尝试注释where子句,并仔细检查连接。但是,如果您可以提供一个示例数据,那么就很容易识别和解决这个问题?这是一个很大的危险信号,表明您的数据模式是问题的根源。@SeanLange我没有,我正在处理ETL。我只是从暂存区收集数据。我认为它与数据相关。尝试注释where子句,并仔细检查连接。但是,如果您可以提供一个示例数据,那么就很容易识别和解决这个问题?这是一个很大的危险信号,表明您的数据模式是问题的根源。@SeanLange我没有,我正在处理ETL。我只是从暂存区收集数据。如果我添加数据,我会得到以下错误“为变量赋值的SELECT语句不得与数据检索操作相结合”。您的方法存在根本性缺陷。您不能单独从
@roles
查询字符串中选择
EmployeeID
,您必须找到一种方法将
EmployeeID
包含在该字符串中。您的SELECT查询只需构造
@roles
查询字符串,无需执行任何操作。如果添加该字符串,则会出现以下错误“为变量赋值的SELECT语句不得与数据检索操作相结合”。您的方法存在根本性缺陷。您不能单独从
@roles
查询字符串中选择
EmployeeID
,您必须找到一种方法将
EmployeeID
包含在该字符串中。SELECT查询只需构造
@roles
查询字符串。