sql - 我想编写一个从数据库中提取数据然后操作该数据的 sqlcmd 脚本
问题描述
我正在尝试查找将运行 select 语句的 sqlcmd 脚本文件的示例,并将这些值返回到脚本内部并将它们放在变量中。然后我想遍历这些返回值,对这些返回值运行一些 if 语句,然后运行一些 sql insert 语句。我正在使用 Sql Server Managment Studio,所以我想我可以在查询编辑器的 sqlcmd 模式下运行一些脚本。也许有更好的方法来做到这一点,但这似乎是一个很好的解决方案。
我在 Microsoft 网站上查看了可能有帮助的 sqlcmd 和 T-SQL 示例。我也对网络进行了一般搜索,但出现的所有示例都过于简单,而且没有帮助。任何帮助,将不胜感激。
解决方案
以下是我对您的起始位置的理解:
create table #data
(
id int,
column1 varchar(100),
column2 varchar(100),
newcolumn int
)
create table #lookup
(
id int,
column1 varchar(100),
column2 varchar(100)
)
insert into #data
values
(1, 'black', 'duck', NULL),
(2, 'white', 'panda', NULL),
(3, 'yellow', 'dog', NULL),
(4, 'orange', 'cat', NULL),
(5, 'blue', 'lemur', NULL)
insert into #lookup
values
(1, 'white', 'panda'),
(2, 'orange', 'cat'),
(3, 'black', 'duck'),
(4, 'blue', 'lemur'),
(5, 'yellow', 'dog')
select * from #data
select * from #lookup
输出:
select * from #data
/------------------------------------\
| id | column1 | column2 | newcolumn |
|----|---------|---------|-----------|
| 1 | black | duck | NULL |
| 2 | white | panda | NULL |
| 3 | yellow | dog | NULL |
| 4 | orange | cat | NULL |
| 5 | blue | lemur | NULL |
\------------------------------------/
select * from #lookup
/------------------------\
| id | column1 | column2 |
|----|---------|---------|
| 1 | white | panda |
| 2 | orange | cat |
| 3 | black | duck |
| 4 | blue | lemur |
| 5 | yellow | dog |
\------------------------/
从这个起点,您可以实现您的要求,如下所示:
update d set d.newcolumn = l.id
from #data d
left join #lookup l on d.column1 = l.column1 and d.column2 = l.column2
alter table #data
drop column column1, column2
这将使表处于所需状态,并将 varchar 值移出到查找表中:
select * from #data
/----------------\
| id | newcolumn |
|----|-----------|
| 1 | 3 |
| 2 | 1 |
| 3 | 5 |
| 4 | 2 |
| 5 | 4 |
\----------------/
select * from #lookup
/------------------------\
| id | column1 | column2 |
|----|---------|---------|
| 1 | white | panda |
| 2 | orange | cat |
| 3 | black | duck |
| 4 | blue | lemur |
| 5 | yellow | dog |
\------------------------/
推荐阅读
- xquery - 无法围绕 XQuery 输出包装元素
- selenium - 我们可以在 Selenium 中使用 CssSelectors 实现父子关系吗
- javascript - 如何将偏移量应用于固定元素(底部:0)
- html - 对多个类使用模板文字
- android-studio - 我每次都必须设置 textDirection 吗?
- html - 如何在不低于它的情况下将一个 div 放在一起?
- javascript - 通过单击图像显示弹出窗口(用于多个图像)
- node.js - 使用 fs.readFile 时的不同回调顺序有无错误
- c - 为什么 GCC -mcmodel=large 即使使用 -no-pie 标志而在没有 -fPIC 的情况下也会向函数调用添加偏移量?
- python - 使用 TensorFlow2 和 Tkinter 库运行 exe 时出现 PyInstaller 错误