Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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_Tsql - Fatal编程技术网

Sql 从不同服务器连接到表

Sql 从不同服务器连接到表,sql,sql-server,tsql,Sql,Sql Server,Tsql,我需要一些帮助 我有两个内部sql Server,一个包含学生信息,另一个包含库存 我想做的是将两者链接在一起,并从“userfile”服务器获取额外的表 下面是我从学生信息中提取的sql的一部分,我知道它是有效的 仅供参考,sql的第一部分是有效的-我确实从sql的第一部分获得了所有的表,但第二部分没有 (及 PupilPersonalDetails.PupilID内部联接[MYSERVERNAME].USERFILE.dbo.com上的 PupilID=用户\文件\用户ID) 非常感谢你的帮

我需要一些帮助

我有两个内部sql Server,一个包含学生信息,另一个包含库存

我想做的是将两者链接在一起,并从“userfile”服务器获取额外的表

下面是我从学生信息中提取的sql的一部分,我知道它是有效的

仅供参考,sql的第一部分是有效的-我确实从sql的第一部分获得了所有的表,但第二部分没有 (及 PupilPersonalDetails.PupilID内部联接[MYSERVERNAME].USERFILE.dbo.com上的 PupilID=用户\文件\用户ID)

非常感谢你的帮助

SELECT
  CurrentPupil.SchoolID AS 'SchoolID',
  CurrentPupil.PupilID AS
  'PupilID',
  PupilPersonalDetails.Surname AS 'Surname',
  PupilPersonalDetails.Forename AS 'First_Name',
  PupilCurrentSchoolYearGroupLookupDetails.Description AS 'Year_Group'
FROM CurrentPupil
LEFT OUTER JOIN PupilPersonalDetails AS PupilPersonalDetails
  ON CurrentPupil.SchoolID = PupilPersonalDetails.SchoolID
  AND CurrentPupil.PupilID = PupilPersonalDetails.PupilID
LEFT OUTER JOIN PupilCurrentSchool AS
PupilCurrentSchool
  ON CurrentPupil.SchoolID = PupilCurrentSchool.SchoolID
  AND CurrentPupil.PupilID = PupilCurrentSchool.PupilID
LEFT OUTER JOIN LookupDetails
AS PupilCurrentSchoolYearGroupLookupDetails
  ON PupilCurrentSchoolYearGroupLookupDetails.LookupDetailsID =
  PupilCurrentSchool.YearGroup
  AND PupilCurrentSchoolYearGroupLookupDetails.LookupID = '3004'
  AND PupilPersonalDetails.PupilID
INNER JOIN [win2k12sql].USERFILE.dbo.pupil
  ON PupilID = user_file_userid
WHERE ('%wc%' = '%wc%')

请像这样写清楚

请测试以下内容

从[win2k12sql.USERFILE.dbo.product]中选择*,其中pupilID=NumberYouKnowExists,其中(“%wc%”=“%wc%”)


如果您使用一些别名,您的查询将更容易处理。公平地说,您的代码中有很多别名,但别名与表名相同。这就像说我的名字是“Sean Lange”,也称为“Sean Lange”.我喜欢使用非常短的别名,然后在查询之间尽可能保持它们的一致性

另外,不要使用字符串文字作为别名。这会起作用,但会增加混乱、更多的击键和零效益。并且,除非您希望列的名称在结果集中不同,否则不需要在列上使用别名

只需使用一些别名和格式化,您的文本墙查询就可以很容易地看到发生了什么

SELECT
    cp.SchoolID
    , cp.PupilID
    , ppd.Surname
    , ppd.Forename AS First_Name
    , pcsygld.Description AS Year_Group
FROM CurrentPupil cp
LEFT OUTER JOIN PupilPersonalDetails AS ppd ON cp.SchoolID = ppd.SchoolID 
                                        AND cp.PupilID = ppd.PupilID
LEFT OUTER JOIN PupilCurrentSchool AS pcs ON cp.SchoolID = pcs.SchoolID 
                                        AND cp.PupilID = pcs.PupilID
LEFT OUTER JOIN LookupDetails AS pcsygld ON pcsygld.LookupDetailsID = pcs.YearGroup
                                        AND pcsygld.LookupID = '3004'
                                        AND ppd.PupilID = cp.PupilID --you were missing cp.PupilID
INNER JOIN win2k12sql.USERFILE.dbo.pupil p ON p.PupilID = user_file_userid
WHERE ('%wc%' = '%wc%') --This doesn't make any sense. You are comparing two string literals.

从[win2k12sql.USERFILE.dbo.poudio where puilID=NumberYouKnowExists where('%wc%'='%wc%')中选择一个学生id并运行select*,然后从那里开始工作。您是否注意到您的服务器连接使用and和处于双连接状态?在从其他服务器进行查询之前,您需要将其添加为链接服务器
SELECT
    cp.SchoolID
    , cp.PupilID
    , ppd.Surname
    , ppd.Forename AS First_Name
    , pcsygld.Description AS Year_Group
FROM CurrentPupil cp
LEFT OUTER JOIN PupilPersonalDetails AS ppd ON cp.SchoolID = ppd.SchoolID 
                                        AND cp.PupilID = ppd.PupilID
LEFT OUTER JOIN PupilCurrentSchool AS pcs ON cp.SchoolID = pcs.SchoolID 
                                        AND cp.PupilID = pcs.PupilID
LEFT OUTER JOIN LookupDetails AS pcsygld ON pcsygld.LookupDetailsID = pcs.YearGroup
                                        AND pcsygld.LookupID = '3004'
                                        AND ppd.PupilID = cp.PupilID --you were missing cp.PupilID
INNER JOIN win2k12sql.USERFILE.dbo.pupil p ON p.PupilID = user_file_userid
WHERE ('%wc%' = '%wc%') --This doesn't make any sense. You are comparing two string literals.