Sql 按键选择非规范化数据库中的所有关联记录
我正在使用SQL server 2012。我只访问了一个数据库,但它还没有任何关系。我对SQL脚本了解不多。我想查看所有具有列EmployeeID的表中与EmployeeID 102关联的所有记录。例如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
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