0

我想将以下查询应用于大量位置的其他两个 circ_slip 值(“付款”和“退款”)。

delete from circ_slip_field 
where location = 'NEW LOCATION' and circ_slip = 'waive'
go
declare @copy_loc varchar(7), @new_loc varchar(7) 
select @copy_loc = 'OLD LOCATION' 
select @new_loc = 'NEW LOCATION'
insert circ_slip_field
       (circ_slip,location,section,ord,circ_slip_field_type,label,field_column,
        append_to_prev,justify,max_field_len,min_field_len,data_mask)
select  circ_slip,@new_loc,section,ord,circ_slip_field_type,label,field_column,
        append_to_prev,justify,max_field_len,min_field_len,data_mask
from circ_slip_field 
where circ_slip = 'waive' and location = @copy_loc

所以我在开头添加了以下行,然后将原始查询复制了 3 次,将 'waive' 的两个实例分别替换为 'payment' 和 'refund'。

 declare @copy_loc varchar(7), @new_loc varchar(7) 
 select @copy_loc = 'COPY LOCATION' 
 select @new_loc = 'NEW LOCATION'

我还删除了两个选择变量语句(@copy_loc 和@new_loc),因为它们已经被声明了。

关于为什么这对我不起作用的任何想法?我将不胜感激。不用说我对 SQL 很陌生。

** 编辑:“没有工作”是指查询运行没有错误,但没有对新位置进行任何更改。

*第二次编辑:我认为问题可能出在“go”命令上。为了让变量在整个过程中工作,我需要从我的三个复制查询中删除“go”。

4

1 回答 1

1

注意@copy_loc 和@new_loc 被定义为varchar(7),但是你在它们里面放了12 个字符。它们被截断,与表中的字段不匹配。将变量设为 varchar(50)。不用担心,它不会占用比它需要的更多的空间。

于 2013-06-25T17:28:34.400 回答