Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 按键选择非规范化数据库中的所有关联记录_Sql_Sql Server_Denormalization - Fatal编程技术网

Sql 按键选择非规范化数据库中的所有关联记录

Sql 按键选择非规范化数据库中的所有关联记录,sql,sql-server,denormalization,Sql,Sql Server,Denormalization,我正在使用SQL server 2012。我只访问了一个数据库,但它还没有任何关系。我对SQL脚本了解不多。我想查看所有具有列EmployeeID的表中与EmployeeID 102关联的所有记录。例如 EmployeeID LastName FirstName (from table Employees) 102 Jonh Smith EmployeeID HireDate (from table Em

我正在使用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

此声明可能会阻止一切工作:

EXEC ('SELECT *  FROM '+ @tablename +'where  EmployeeID = 102')
表名后面需要一个空格:

EXEC ('SELECT *  FROM '+ @tablename +' where  EmployeeID = 102')
此外,您的光标逻辑似乎已关闭。您应该检查
@@FETCH\u状态
,然后关闭并取消分配光标


遵循本节末尾的示例。

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

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