今儿个咱来聊聊 SQL 里的 DECLARE,这玩意儿可有点儿意思。前两天我不是接个活儿嘛要给一个老数据库捣鼓点新数据进去。那数据库,年头可久,里面啥数据都有,跟个老古董似的。我这心里就犯嘀咕,这要是直接 INSERT 语句往里怼,万一哪天手一抖,或者重复执行,那不就乱套嘛
所以我就琢磨着,得找个法子,让这脚本能安全点儿,最好是能重复执行,但数据只写一次,别给我整出重复数据来。这时候,DECLARE 就派上用场。
DECLARE 初体验
我一开始也是两眼一抹黑,不知道这 DECLARE 到底咋用。我就去网上搜,看各种帖子、博客,总算是摸着点门道。这 DECLARE,说白,就是用来在 SQL 脚本里定义个变量。这变量就像个小盒子,能装点东西,比如数字、字符串啥的。
我先试着定义一个变量:
DECLARE @MyVariable INT;
瞧见没,这变量名前面得带个“@”符号,这规矩可不能乱。后面跟着的是变量类型,我这里定义的是 INT,就是整数类型。你也可以定义其他类型的,比如 VARCHAR(字符串)、DATETIME(日期时间)等等,看你具体需要啥。
给变量赋值
定义好变量,接下来就得给它赋值。我这儿有两种法子,一种是用 SET,一种是用 SELECT。
先说 SET:
SET @MyVariable = 10;
这意思就是把 10 这个数字放进 @MyVariable 这个小盒子里。简单明?
再来说 SELECT:
SELECT @MyVariable = COUNT() FROM MyTable;
这个稍微复杂点,意思是从 MyTable 这张表里数数,看看有多少条记录,然后把这个数放进 @MyVariable 里。这 SELECT 赋值,一般是用在需要从数据库里取数据的时候。
用变量干活
变量定义好,也赋值,接下来就该用它来干活。我这回的任务不是要往数据库里插数据嘛我就用这个变量来控制,保证数据只插一次。
我的思路是这样的:
- 先定义一个变量,用来记录某个关键数据是否已经存在。
- 然后用 SELECT 语句去数据库里查,看看这个关键数据有没有。
- 如果查到,说明数据已经存在,我就啥也不干。
- 如果没查到,说明数据不存在,我就执行 INSERT 语句,把数据插进去。
下面是我的 SQL 脚本(简化版):
DECLARE @DataExists INT;

SELECT @DataExists = COUNT() FROM MyTable WHERE KeyColumn = 'MyKeyValue';
IF @DataExists = 0
BEGIN
-- 这里写 INSERT 语句,插入新数据
INSERT INTO MyTable (KeyColumn, OtherColumn) VALUES ('MyKeyValue', 'SomeValue');
END

这段脚本,我先定义一个变量 @DataExists,然后用 SELECT 语句去 MyTable 表里查,看看有没有 KeyColumn 等于 'MyKeyValue' 的记录。如果有,@DataExists 就会大于 0;如果没有,@DataExists 就是 0。我用 IF 语句判断,如果 @DataExists 等于 0,就执行 INSERT 语句,插入新数据。这样,不管我执行多少次这个脚本,数据都只会被插入一次,完美解决我的问题!
这回用 DECLARE 的经历,让我觉得这玩意儿真是个好东西。它不仅能让 SQL 脚本更安全,还能让代码更清晰、更容易维护。以后再遇到类似的需求,我肯定还会用它!