我在我的sql server 2008中添加了一个链接服务器.我想从一个表和一个驻留在我的链接服务器上的表值函数中获取数据,并按照下面给出的命名约定将这些数据连接到本地表.
...
但是我的第一个问题是我需要
从表中获取部分.因此,当我尝试做类似跟随它的事情失败时
Select * FROM @ServerNameVariable.database.dbo.myTable
知道如何用用户定义的变量形成完全限定的链接服务器表名?
我的SP如下
CREATE PROCEDURE TEST_SP
AS
BEGIN
DECLARE @NetworkDBName VARCHAR(255)
SET @NetworkDBName = '[MyLinkedServerName]'
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
select * from @NetworkDBName + '.' + testDatabase.dbo.Invoice_tb
END
GO
destination-..
6
您不能使用变量代替数据库,模式或表名.
相反,您可以使用sp_ExecuteSQL构建和执行动态SQL语句.
此示例不起作用,因为服务器名称被视为字符串而不是服务器对象.
失败的例子
/* Anti-pattern.
* Does not work.
*/
DECLARE @Server SYSNAME = 'Server001';
SELECT
*
FROM
@Server.Database1.dbo.Table1
;
此示例显示了一个可行的方法.这里,SQL语句构建为一个字符串,然后执行.
/* Dynamic SQL statement.
* Will work.
*/
DECLARE @Server SYSNAME = 'Server001';
DECLARE @Statement NVARCHAR(255);
SET @Statement = 'SELECT * FROM ' + QUOTENAME(@Server) + '.Database1.dbo.Table1;';
EXECUTE sp_ExecuteSQL @Statement;
如初; 生成和执行动态SQL语句时请小心.您不希望自己打开SQL注入攻击.在执行之前,查看OPENROWSET或检查传递的服务器名称是否符合上面@Devart提供的代码(SELECT name FROM sys.servers WHERE server_id> 0).
编辑1:在SQL注入的段落中添加了更多细节.
编辑2:删除第二个示例查询中的方括号,替换为QUOTENAME,根据@TTs注释.
1> destination-..:
您不能使用变量代替数据库,模式或表名.
相反,您可以使用sp_ExecuteSQL构建和执行动态SQL语句.
此示例不起作用,因为服务器名称被视为字符串而不是服务器对象.
失败的例子
/* Anti-pattern.
* Does not work.
*/
DECLARE @Server SYSNAME = 'Server001';
SELECT
*
FROM
@Server.Database1.dbo.Table1
;
此示例显示了一个可行的方法.这里,SQL语句构建为一个字符串,然后执行.
/* Dynamic SQL statement.
* Will work.
*/
DECLARE @Server SYSNAME = 'Server001';
DECLARE @Statement NVARCHAR(255);
SET @Statement = 'SELECT * FROM ' + QUOTENAME(@Server) + '.Database1.dbo.Table1;';
EXECUTE sp_ExecuteSQL @Statement;
如初; 生成和执行动态SQL语句时请小心.您不希望自己打开SQL注入攻击.在执行之前,查看OPENROWSET或检查传递的服务器名称是否符合上面@Devart提供的代码(SELECT name FROM sys.servers WHERE server_id> 0).
编辑1:在SQL注入的段落中添加了更多细节.
编辑2:删除第二个示例查询中的方括号,替换为QUOTENAME,根据@TTs注释.
而不是用矩形括号手动括起服务器名称(或数据库,表名等),使用[`QUOTENAME函数`](https://msdn.microsoft.com/nl-be/library/ms176114.aspx).如果名称包含矩形括号,此函数将正确转义.
推荐阅读
-
如何解决《R在同一图中绘制多条生存曲线》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《Tensorflow多元线性回归不收敛》经验,为你挑选了0个好方法。 ...
[详细]
-
如何解决《模型设计:用户有朋友是用户》经验,为你挑选了2个好方法。 ...
[详细]
-
如何解决《CMake似乎忽略了CMAKE_OSX_DEPLOYMENT_TARGET》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《Mongolab连接错误》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《ASP.net5WebAPIPostCreatedAtRoute始终返回500内部服务器错误》经验,为你挑选了0个好方法。 ...
[详细]
-
如何解决《numpy,获得最大的子集》经验,为你挑选了0个好方法。 ...
[详细]
-
如何解决《无法与XX.XXX.XX.XX协商:未找到匹配的主机密钥类型.他们的提议:ssh-dss》经验,为你挑选了4个好方法。 ...
[详细]
-
如何解决《无法将任何第三方模块与AWSLambdas一起使用》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《Plsql分割字符串的最佳方法》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《如何隐藏或禁用功能中打印的消息》经验,为你挑选了2个好方法。 ...
[详细]
-
如何解决《如何使用nodejschild_process.spawn捕获ENOENT?》经验,为你挑选了2个好方法。 ...
[详细]
-
如何解决《使用activityManager.getRunningAppProcesses()获取(实际)前台进程》经验,为你挑选了0个好方法。 ...
[详细]
-
如何解决《为什么具有背景的父元素不会覆盖宽度大于视口的子元素?》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《stream.forEach中的多行代码》经验,为你挑选了2个好方法。 ...
[详细]
-
如何解决《用Python生成多维网格》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《Angular2可选路由参数》经验,为你挑选了5个好方法。 ...
[详细]
-
如何解决《在AWS中重新分配私有IP地址?》经验,为你挑选了2个好方法。 ...
[详细]
-
如何解决《如果我使用RxJava链接多个运算符,我需要为每个运算符调用.subscribeOn()吗?》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《逐行读取文本文件到字符串中》经验,为你挑选了1个好方法。 ...
[详细]
吐了个 "CAO" !
Tags | 热门标签
RankList | 热门文章
-
1如何防止记录pyspark的“已收到答复”和“发送命令”消息
-
2尾递归映射f#
-
3MySQL Workbench导入限制
-
4在Windows上的PHP7安装中找不到mysqli类
-
5v-for中的计算/动态v模型名称
-
6在嵌套的MongoDB调用中,如何确保原子性?
-
7Intellij - 是否存在for循环类型的自动完成?
-
8反向for循环在Postgresql中不起作用
-
9Xamarin表单ListView CachingStrategy
-
10indexOf显然不应该返回-1
-
11OSError:[Errno 107]传输端点未连接
-
12如何使toctree链接引用单独的文件,就像它引用的小节一样
-
13pyodbc无法连接到数据库
-
14最后,除了在python中加注之外,重新发现异常
-
15删除迁移和makemigrations后的django.db.utils.OperationalError
-
16片段重用
-
17评估c中if语句中的表达式
-
18Flask API突然没有收到请求
-
19无法在ubuntu中找到mongod.conf文件
-
20如何在逻辑回归中避免NaN?
DevBox开发工具箱 | 专业的在线开发工具网站 京公网安备 11010802040832号 | 京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有