我正在使用 SQL Server 链接服务器,在运行查询时发现了一些困难。
以下是实际查询。
USe testdb
SELECT 'Identitiy property OFF' where COLUMNPROPERTY( OBJECT_ID('Table_1'),'column1','IsIdentity')=0
要将它运行到我使用的链接服务器
Use mylinkedserver.testdb
SELECT 'Identitiy property OFF' where COLUMNPROPERTY( OBJECT_ID('Table_1'),'column1','IsIdentity')=0
但是当我运行它时,我得到如下所示的错误数据库'mylinkedserver'不存在。确保输入的名称正确。
我可以在哪里select * from pc91sql.testdb.dbo.Table_1
成功使用查询表。
那么如何运行上述查询?(我认为我不能将“USE”与链接服务器一起使用。那么有什么替代方法
编辑:
这些事情我在得到很好的答复后尝试过。然后我使用了 OPENQUERY 选项
SELECT * FROM OPENQUERY(pc91sql,'SELECT COLUMNPROPERTY( OBJECT_ID(''testdb.dbo.Table_1''),''column1'',''IsIdentity'')');
它返回 NULL。但它应该返回 1,因为 column1 是一个标识列。
然后我再次检查直接在链接服务器中运行我的原始查询而不使用命令并返回 NULL。如果我在提到之后use testdb
或在从列表中选择数据库后在 SSMS 中运行相同的查询,那么它会返回 1 。所以这意味着OBJECT_ID
不能将数据库名称与表名称一起使用(即像“testdb.dbo.Table_1”)。
您可以使用
EXEC
在不同的数据库或不同的服务器中运行动态 SQL。另外请尝试直接使用目录视图,而不是所有这些杂乱的元数据功能。更好的是,参数化它:
签出
OPENQUERY
(BOL 参考)OPENQUERY
专为直接在链接服务器上执行查询而设计。第一个参数是链接服务器的名称,而第二个参数是要对其执行的查询。
我不完全确定您查询的语法,但这样的事情应该可以工作。