Я хочу написать сценарий sqlcmd, который извлекает данные из базы данных, а затем манипулирует этими данными - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь найти примеры файлов сценариев sqlcmd, которые будут запускать оператор select, возвращать эти значения внутри сценария и помещать их в переменную.Затем я хочу перебрать эти возвращенные значения, выполнить несколько операторов if для этих возвращаемых значений, а затем выполнить несколько операторов вставки sql.Я использую Sql Server Managment Studio, поэтому я подумал, что смогу запустить некоторые сценарии в режиме sqlcmd редактора запросов.Возможно, есть лучший способ сделать это, но это кажется хорошим решением.

Я посмотрел на веб-сайте Microsoft примеры sqlcmd и T-SQL, которые могут помочь.Я также провел общий поиск в Интернете, но все примеры, которые появляются, слишком упрощены и не помогли.Любая помощь будет оценена.

1 Ответ

1 голос
/ 13 июня 2019

Вот как я понимаю вашу начальную позицию:

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     |
\------------------------/
...