我正在使用 SQL Server 2014,我有以下簡單的 t-sql 查詢,它列出了本地資料庫表中的所有列及其相關資料型別。
USE [MyDatabase]
exec sp_columns [Table1]
我想查詢位于鏈接服務器上的同一個表。但是,我的查詢中一定有問題,因為我收到“語法不正確”錯誤:
USE [MyDatabase]
exec sp_columns [Server IP].[Database Name on linked Server].dbo.[Table1]
任何幫助,將不勝感激。
uj5u.com熱心網友回復:
問題是您缺少引號,您沒有將您的值設為文字字串。這可以在沒有鏈接服務器的情況下輕松復制:
CREATE TABLE dbo.MyTable (ID int);
GO
EXEC sys.sp_columns MyTable;
GO
EXEC sys.sp_columns dbo.MyTable;
GO
DROP TABLE dbo.MyTable;
第一次呼叫sys.sp_columns作業正常,因為MyTable根據檔案,文字被解釋為文字字串:
如果您傳遞一個不以 @ 開頭且未用引號括起來的單詞 - 例如,如果您忘記了引數名稱上的 @ - 該單詞將被視為 nvarchar 字串,盡管缺少引號。
所以MyTable被視為N'MyTable'。對于后一種呼叫,情況并非如此。這也被記錄在案(根據上文),并且還明確指出了物件名稱:
如果引數的值為物件名、字串或由資料庫名或模式名限定,則整個名稱必須用單引號括起來。如果引數的值為關鍵字,則關鍵字必須用雙引號括起來。
強調我的。你沒有參考你的字串,所以它出錯了。
'.' 附近的語法不正確。
因此,對于上述內容,請參考您的字串。字面意思就是這么簡單:
EXEC sp_columns N'dbo.MyTable';
uj5u.com熱心網友回復:
您可以通過普通的鏈接服務器名稱查詢系統表
select
typename = typ.name,
c.*
from [Server IP].[Database Name on linked Server].sys.columns c
join [Server IP].[Database Name on linked Server].sys.tables t on t.object_id = c.object_id
join [Server IP].[Database Name on linked Server].sys.schemas s on s.schema_id = t.schema_id
join [Server IP].[Database Name on linked Server].sys.types typ on typ.system_type_id = c.system_type_id
where t.name = 'Table1'
and s.name = 'SchemaName'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/337065.html
標籤:sql-server 查询语句 链接服务器
上一篇:資料選擇SQL
