การใช้เซิร์ฟเวอร์ที่เชื่อมโยงกับ OPENQUERY ในโครงการฐานข้อมูล


10

ฉันมี SQL Server 2008 ที่ใช้ฐานข้อมูลที่ฉันต้องการจะโยนใน TFS ดังนั้นฉันจึงใช้โครงการฐานข้อมูล Visual Studio 2013 ที่ฉันนำเข้าฐานข้อมูล หลังจากแก้ไขข้อผิดพลาดจำนวนมากฉันติดอยู่กับข้อผิดพลาดเดียวที่เหลืออยู่:

ในมุมมองหนึ่ง devs ที่ใช้OPENQUERYในการเข้าถึงเซิร์ฟเวอร์ที่เชื่อมโยง ดังนั้นฉันจึงนำเข้า DACPAC ซึ่งมีฐานข้อมูลที่ถูกต้องและเพิ่มเข้าไปในโครงการโดยใช้Add Database Referenceตัวเลือกการอ้างอิงต่อไปนี้

การตั้งค่าสำหรับการอ้างอิงฐานข้อมูล

เวอร์ชันสคริปต์เริ่มต้น

นี่คือเวอร์ชันที่สั้นกว่าของการสร้างมุมมองดั้งเดิม:

CREATE VIEW dbo.vwStatus
AS
SELECT     StatusID, StatusName
FROM       OPENQUERY(LinkedServer, 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1

นำไปสู่ข้อผิดพลาดต่อไปนี้:

ข้อผิดพลาด 136 SQL71501: มุมมอง: [dbo]. [vwStatus] มีการอ้างอิงที่ไม่ได้แก้ไขไปยังวัตถุ [LinkedServer]

ความพยายามครั้งแรก

ดังนั้นฉันจึงพยายามแทรกตัวแปรชื่อเซิร์ฟเวอร์

FROM       OPENQUERY($(LinkedServer), 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1

ซึ่งนำไปสู่

ข้อผิดพลาด 176 SQL46010: ไวยากรณ์ไม่ถูกต้องใกล้กับ $ (LinkedServer)

ความพยายามเพิ่มเติม

ฉันเล่นซอนิด ๆ หน่อย ๆ และลองต่อไปนี้ (มีและไม่มีการเปิดใช้ตัวระบุที่อ้างถึง):

FROM       OPENQUERY("$(LinkedServer)", 'SELECT * FROM [DB].[dbo].tbStatus') AS 
FROM       OPENQUERY([$(LinkedServer)], 'SELECT * FROM [DB].[dbo].tbStatus') AS 
FROM       OPENQUERY([LinkedServer], 'SELECT * FROM [DB].[dbo].tbStatus') AS 
FROM       OPENQUERY("LinkedServer", 'SELECT * FROM [DB].[dbo].tbStatus') AS 

ฉันมักจะได้รับข้อผิดพลาด

ฉันไม่มีเงื่อนงำสิ่งที่ฉันมองเห็นที่นี่ คุณ ขอบคุณที่สละเวลา!

(น่าเศร้าที่ฉันไม่สามารถเพิ่มแท็ก visual-studio-2013 ดังนั้นฉันจึงใช้ visual-studio)

คำตอบ:


9

ฉันจัดการเพื่อให้มันทำงาน:

masterฉันสร้างโครงการฐานข้อมูลใหม่ ในการมีผมสร้างโฟลเดอร์และไฟล์Server Object LinkedServer.sqlในไฟล์ SQL ฉันเพิ่มเซิร์ฟเวอร์ที่เชื่อมโยง:

GO
EXECUTE sp_addlinkedserver @server = N'LinkedServer', @srvproduct = N'sqlserver', @provider = N'SQLNCLI', @datasrc = N'LinkedServer.domain';

หลังจากเพิ่มโครงการฐานข้อมูลmasterไปยังโซลูชันของฉันและอ้างอิงในโครงการฐานข้อมูลต้นฉบับของฉันฉันสามารถสร้างโครงการโดยใช้ไวยากรณ์เริ่มต้น

CREATE VIEW dbo.vwStatus
AS
SELECT     StatusID, StatusName
FROM       OPENQUERY(LinkedServer, 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1

ฉันยังไม่สามารถใช้งานได้แม้จะมีโครงการหลักที่มีไฟล์ LinkedServers.sql อยู่ที่นั่น
ทดสอบ

มันยากที่จะช่วยเหลือหากไม่มีข้อมูลเพิ่มเติม อาจเป็นการดีกว่าที่จะถามคำถามอื่น สิ่งสำคัญคือการอ้างอิงโครงการหลักของคุณในโซลูชันของคุณ มิฉะนั้นสิ่งนี้ใช้ได้สำหรับฉันตรงตามที่อธิบายไว้
Chake

ภายในโซลูชันของคุณคุณมี dacpac หรือโครงการที่มี LinkedServer DBAs หรือไม่
Martin Meeser

สวัสดีฉันจำไม่ได้ แต่ฉันเขียนในย่อหน้าที่สองว่าฉันใช้ dacpacs แต่สำหรับทางออกสุดท้ายฉันอ้างอิงโครงการฐานข้อมูลสำหรับฐานข้อมูลหลัก
Chake

1
หมายเหตุคุณต้องตรวจสอบให้แน่ใจว่าไฟล์ 'LinkedServer.sql' ของคุณมีการสร้างบิลด์เป็น 'บิลด์' VS ที่น่ารำคาญดูเหมือนจะไม่รู้จักเซิร์ฟเวอร์ที่เชื่อมโยงจากสคริปต์การปรับใช้ล่วงหน้าหรือทั้งหมดนี้ไม่จำเป็น
Taran
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.