【问题标题】:Select by a key for all associated records from a denormalizing database按键为非规范化数据库中的所有关联记录选择
【发布时间】:2014-07-22 17:30:40
【问题描述】:

我使用的是 SQL Server 2012。我只能访问一个尚未建立任何关系的数据库。我不太了解 SQL 脚本。我想从所有具有 EmployeeID 列的表中查看与 EmployeeID 102 关联的所有记录。例如。

EmployeeID    LastName     FirstName   (from table Employees)
102           Jonh         Smith
EmployeeID    HireDate                 (from table EmploymentRecords)
102           2/1/2014
EmployeeID    Monthly Salary           (from table Salary)
102           2000
and so on

我尝试了以下脚本,但结果窗口关闭,在消息窗口中它只是说“命令成功完成”。我怎样才能得到上述结果。提前致谢。

DECLARE tnames_cursor CURSOR
FOR
  SELECT TABLE_NAME 
  FROM INFORMATION_SCHEMA.TABLES
OPEN tnames_cursor
DECLARE @tablename sysname
FETCH NEXT FROM tnames_cursor INTO @tablename

if (select count(*) from information_schema.columns where  table_name = @tablename and     Column_name ='EmployeeID') > 0

BEGIN   

  SELECT @tablename = RTRIM(@tablename) 
  EXEC ('SELECT *  FROM '+ @tablename +'where  EmployeeID = 102')
END

【问题讨论】:

    标签: sql sql-server denormalization


    【解决方案1】:

    此语句可能会阻止一切正常工作:

    EXEC ('SELECT *  FROM '+ @tablename +'where  EmployeeID = 102')
    

    表名后需要一个空格:

    EXEC ('SELECT *  FROM '+ @tablename +' where  EmployeeID = 102')
    

    此外,您的光标逻辑似乎关闭了。您应该检查@@FETCH_STATUS,然后关闭并释放光标。

    按照documentation末尾的示例进行操作。

    【讨论】:

      【解决方案2】:

      基本上,最直接的问题是您没有遍历整个结果集。

      DECLARE tnames_cursor CURSOR
      FOR
        SELECT TABLE_NAME 
        FROM INFORMATION_SCHEMA.TABLES
      OPEN tnames_cursor
      DECLARE @tablename sysname
      FETCH NEXT FROM tnames_cursor INTO @tablename
      
      while @@FETCH_STATUS=0
      begin
      
          if (select count(*) from information_schema.columns where  table_name = @tablename and     Column_name ='EmployeeID') > 0
          begin
      
              SELECT @tablename = RTRIM(@tablename) 
              EXEC ('SELECT *  FROM '+ @tablename +'where  EmployeeID = 102')
          end
      
      
          FETCH NEXT FROM tnames_cursor INTO @tablename
      end
      close tnames_cursor
      deallocate tnames_cursor
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-02
        • 2016-11-18
        • 2018-02-07
        • 2019-11-03
        • 1970-01-01
        • 2016-07-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多