tsql - 执行从本地表值参数或临时表源到链接服务器的合并
问题描述
我的目标是将数据从 webapp 加载到链接服务器上的数据库中。用户将创建数千行 8 列的数据。
我试图在Microsoft的Table Valued Parameters文章中实现 P assing a Table Valued Parameter to a Parameterized SQL Statement的一个版本。
我遇到的一个大问题是弄清楚如何将表值参数或临时表传递到Execute()中,我将在其中放置 MERGE。
将数据从 Web 应用程序移动到本地数据库然后是链接服务器的最佳方式是什么?
这是我可以使用临时表获得的尽可能接近的结果:
CREATE TABLE #TempTable
(
car int not null,
mileage int not null,
interface DECIMAL(18,0) not null,
primary key(car, interface)
);
SELECT
123 AS car,
321 as mileage,
444 AS interface
INTO #TempTable
EXEC('
CREATE TABLE #TempTable
(
car int not null,
mileage int not null,
interface DECIMAL(18,0) not null,
primary key(car, interface)
)
MERGE dbo.total AS target
USING #TempTable AS temp
ON temp.car = target.car AND temp.interface = target.interface AND temp.mileage = target.mileage
WHEN MATCHED THEN
UPDATE SET target.mileage = 1337
WHEN NOT MATCHED
THEN INSERT (car, interface, mileage)
VALUES (temp.car, temp.interface, temp.mileage );
',#TempTable) at LinkedServer;
DROP TABLE #TempTable
但是,此查询什么也不做。什么都没有通过。
这是我使用临时表参数得到的最接近的值:
-- FYI only
CREATE TYPE TempType AS TABLE
(
car int not null,
mileage int not null,
interface DECIMAL(18,0) not null,
primary key(car, interface)
);
DECLARE @TempTable AS TempType;
INSERT INTO @TempTable (car, mileage, interface)
SELECT 1,1000,123;
SELECT('
DECLARE @TotalTemp AS TempType;
MERGE dbo.TargetTable AS targ
USING @TotalTemp AS temp
ON temp.car = targ.car AND temp.interface = targ.interface
WHEN MATCHED THEN
UPDATE SET targ.mileage = 1337
WHEN NOT MATCHED
THEN INSERT (car, interface, mileage)
VALUES (temp.car, temp.interface, temp.mileage);
',@TempTable) at LinkedServer
此查询给出语法错误。
我也意识到从链接服务器访问临时表到本地服务器将是一个解决方案。但是,我发布此问题的唯一目的是查看是否可以将 TVP 或临时表传递给EXECUTE语句。
解决方案
推荐阅读
- java - 当方法仅在调试时工作时模拟
- f# - 从 4.6.1 升级到 4.7.2 后可信证书失败
- javascript - JS如何连接数组的数组
- java - 如何匹配包含空格的文件名
- asp.net-core - 为什么在使用.Net核心时打开页面部分的锚标记会转到空白页面
- mysql - 为 MySQL/Tomcat/Maven Java Webapp 创建 Docker 文件
- json - jq 分割字符串并赋值
- java - MyBatis 生成大于符号后
- python - 为什么泡菜比 np.save 花费这么多时间?
- knockout.js - Knockout.js 与服务器端模板引擎混合出现意外行为