我正在使用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
答案 0 :(得分:2)
这句话可能会阻止一切工作:
EXEC ('SELECT * FROM '+ @tablename +'where EmployeeID = 102')
表名后需要一个空格:
EXEC ('SELECT * FROM '+ @tablename +' where EmployeeID = 102')
此外,您的光标逻辑似乎已关闭。您应该检查@@FETCH_STATUS
,然后关闭并取消分配光标。
答案 1 :(得分:1)
基本上,当前问题是您没有循环遍历整个结果集。
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