sql - 从两个临时表 INSERT INTO
问题描述
我有 2 个临时表,每个表都有数据。
我想使用两个临时表中的数据在真实表中插入数据
我只是尝试了类似的方法,但无法正常工作!
INSERT INTO list_'+CONVERT(VARCHAR,@listid)+'.dbo.members_optout_snapshot(listid,optout,nbreEmail,nbreSMS,date_snapshot)
SELECT listid, optout, nbEmail, date FROM #tmpOptout
UNION ALL
SELECT listid, optout, nbSMS, date FROM #tmpOptoutSMS
谢谢您的帮助 !
解决方案
您不能将变量用作对象名称的一部分或替换。例如,以下失败:
DECLARE @object sysname = N'Columns';
SELECT *
FROM sys.@object;
您需要使用动态 SQL:
DECLARE @object sysname = N'Columns';
DECLARE @SQL nvarchar(MAX);
SET @SQL = N'SELECT * FROM sys.' + QUOTENAME(@object) + N';';
EXEC sp_executesql @SQL;
对于您所拥有的,这将意味着:
DECLARE @SQL nvarchar(MAX);
SET @SQL = N'
INSERT INTO ' + QUOTENAME('list_' + CONVERT(varchar(10),@listid)) + N'.dbo.members_optout_snapshot (listid,
optout,
nbreEmail,
nbreSMS,
date_snapshot)
SELECT listid,
optout,
nbEmail,
date
FROM #tmpOptout
UNION ALL
SELECT listid,
optout,
nbSMS,
date
FROM #tmpOptoutSMS;';
PRINT @SQL; --Your Best friend
EXEC sp_executesql @SQL;
注 1:这是未经测试的。使用你最好的朋友来帮助你调试。
注意2:不要声明varchar
没有长度的a!我已经猜到varchar(10)
这里了。
注 3:这是基于 OP 的原始不完整问题。Squirrel 注意到INSERT
andSELECT
子句中的列数不匹配(分别为 5 和 4 列);因此这个查询仍然会失败。不过,我并没有解决这一点,因为我要回答的问题是关于原始格式的,并且 OP 似乎正在尝试使用变量作为对象名称。我将离开松鼠来解决他在回答中注意到的问题。
推荐阅读
- google-apps-script - 如何使其他用户能够从共享的 Google 表格运行脚本以读取我的任务列表
- angular - 链接预览不显示内容
- ruby-on-rails - link_to 将我重定向到索引操作而不是 :action one
- sql - 为什么我在使用 SELECT REF 时收到“不一致的数据类型:预期的 CHAR 得到了 REF”?
- php - 如何使用 CodeIgniter 表单验证库通过 AJAX 验证空复选框并显示消息?
- django - 如何修复“在 django 视图中的线程 'Thread-2' 错误中没有当前事件循环
- javascript - 不应该调用的函数
- android - 如何根据我使用 PHP 从 MySQL 检索的用户名和密码打开另一个活动?
- python - 如何将 .csv 文件中的数据转换为 NumPy 数组并使用统计数据来查找数据的平均值?
- react-native - 摆脱 RN 0.59 的 viewpagerandroid 和滑块的警告