0

调用插入脚本触发器时,我需要调用存储过程。这个想法是使用存储过程在 3 个表中插入行,包括原始表。

我有以下表格 - 汽车 - 制造商 - 型号

存储过程接收汽车的数据、制造商名称和型号名称。SP 在制造商和型号表中查找,如果没有找到,则插入一条新记录。

这是我的脚本触发代码:

function insert(item, user, request) {     
var params = [item.name, item.year, item.maker_name, item.model];
var sql = "exec myCars.sp_insert_car ?, ?, ?, ?";
mssql.query(sql, params,
{
    success: function(results) {
        request.respond(statusCodes.OK,{ 
            results: results,
            count: 1
        });       
    }        
});
}

因为 sp_insert_car 在 cars 表中插入一行,所以再次调用触发器。奇怪的是,当插入新的制造商或模型时也会调用它。

有没有办法在第二次调用触发器时禁用?

此外,SP 有一个返回新汽车 ID 的输出参数。有没有办法得到这个输出参数?

感谢您提供的任何帮助

4

2 回答 2

0

我认为您想先运行 request.execute 以将数据放入原始表中。然后在成功函数中运行您的存储过程以将数据(如果缺少)添加到其他表中。类似于...的东西

function insert(item, user, request) {
    request.execute({
        success: function() {
            var params = [item.name, item.year, item.maker_name, item.model];
            var sql = "myCars.sp_insert_car ?, ?, ?, ?";
            mssql.query(sql, params, {
                success: function(results) {
                    request.respond(statusCodes.OK,{ 
                        results: results,
                        count: 1
                    });
                }
            });
        }
    });
}

这也使您可以获取原始表 item.id 中新插入行的 id,以在需要时用作存储过程的传入参数。

于 2013-05-29T05:47:29.733 回答
0
add this  line ...

var mssql=request.service.mssql;

上划线

mssql.query ("EXEC dbo.Sp_User_Authentication ?, ?",request.query.username,request.query.password)

于 2015-07-29T10:20:10.753 回答