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_Foxpro - Fatal编程技术网

Sql server 如何在另一个表变量中使用一个表变量的字段(列)

Sql server 如何在另一个表变量中使用一个表变量的字段(列),sql-server,foxpro,Sql Server,Foxpro,我在将数据库从Foxpro迁移到SQL时遇到了这种情况 下面是示例场景。。(我的原始代码有点复杂,所以我尝试创建自己的示例) 我在sql server函数中创建了几个表变量以获得所需的内容 DECLARE @temp_1 TABLE(ID INT, Name NCHAR(7), bday DATE, m_status NVARCHAR(10)); INSERT INTO @temp_1 SELECT Name, bday, m_status from Employee_Info DECL

我在将数据库从Foxpro迁移到SQL时遇到了这种情况

下面是示例场景。。(我的原始代码有点复杂,所以我尝试创建自己的示例)

我在sql server函数中创建了几个表变量以获得所需的内容

DECLARE @temp_1 TABLE(ID INT,
Name NCHAR(7),
bday DATE,
m_status NVARCHAR(10)); 

INSERT INTO @temp_1
SELECT Name, bday, m_status from Employee_Info


DECLARE @temp_2 TABLE(ID INT,
City NCHAR(7),
Country NVARCHAR(10),
zip NVARCHAR(10)); 

INSERT INTO @temp_2
SELECT City, Country, zip from Employee_Address
接下来是一种情况,我需要使用上述表变量中的每个字段将数据导出到第三个表变量中

比如说,

DECLARE @temp_full TABLE (
Name NCHAR(7),
City NCHAR(7));

INSERT INTO @temp_full
SELECT @temp_1.Name, @temp_2.City FROM @temp_1, @temp_2 WHERE @temp_1.ID = @temp_2.ID

[EDITED TO INCLUDE INSERT USING JOINS]

INSERT INTO @temp_full
SELECT @temp_1.Name, @temp_2.City FROM @temp_1 INNER JOIN @temp_2 ON @temp_1.ID = @temp_2.ID
但是,当我执行@temp_1.Name、@temp_2.City时,我会收到一个错误,告诉我必须删除标量变量@temp_1、@temp_2

谁能告诉我如何解决这个问题


谢谢您的帮助。

这不是foxpro,@variable\u表不是foxpro中的游标,表没有任何当前记录指针,表是记录集,您必须像处理集合一样使用它

如果需要使用表@temp_1和@temp_2的组合记录填充@temp_full,则必须使用select将这两个表连接起来,如下所示:

INSERT INTO @temp_full
SELECT 
    temp_1.Name, 
    temp_2.City 
FROM @temp_1 temp_1 
JOIN @temp_2 temp_2 on temp_2.ID = temp_1.ID

还请注意,您必须为变量表使用别名

此处可能存在其他问题,但您是试图一次运行一个查询,还是同时运行两个查询?隐式连接区域SQL反模式。您应该始终使用显式联接。这是21世纪,1992年被添加到ANSII标准中。您是否会使用1992年被更好的语言取代的不同语言的代码?您是否应该将这两个表关联起来,然后在上次选择中将temp_1连接到temp_2?请原谅我的逻辑。。我应该用joins。。我只是想知道为什么我不能在@temp_full中使用@temp_1、@temp_2的字段。。我正在从存储的proc..@fanosek.立即运行查询。。出于某种奇怪的原因,直到我为表变量使用别名,我的逻辑才起作用。。如果删除表变量的别名,sql将抛出“必须删除标量变量@temp_1、@temp_2”错误。。对为什么会发生这种情况有什么见解吗?非常感谢你的帮助!