0

这是原始问题

好的,我正在使用 Node.js 和 Edge.js 将值插入 SQL 数据库。第一次尝试是直接插入硬编码值:

var insertRow = edge.func('sql', function () {/*
    INSERT INTO dbo.table (column0, column1, column2)
    VALUES (value0, value1, value2)
*/});

insertRow();

当然,这种硬编码插入按预期工作。正如我之前的问题的答案所见,将对象传递给函数允许 SQL 语句通过 @ 识别对象的名称/值对,从而允许动态值分配:

var rowObj = {
    v0: 'value0',
    v1: 'value1',
    v2: 'value2'
}

var insertRow = edge.func('sql', function () {/*
    INSERT INTO dbo.table (column0, column1, column2)
    VALUES (@v0, @v1, @v2)
*/});

insertRow(rowObj);

按预期工作。我想做的是通过同一个rowObj提供的属性使表和列也可变。我试过了:

var rowObj = {
    t: 'dbo.table',
    c0: 'column0',
    c1: 'column1',
    c2: 'column2',
    v0: 'value0',
    v1: 'value1',
    v2: 'value2'
}

var insertRow = edge.func('sql', function () {/*
    INSERT INTO @t (@c0, @c1, @c2)
    VALUES (@v0, @v1, @v2)
*/});

insertRow(rowObj);

但这不起作用。我尝试让表格自己动态化,并让列自己动态化,但这也不起作用。

注意:我不懂 SQL,我不知道 Node.js/Edge.js 的局限性,而且我对一般编程很陌生(所以如果我的命名法不一致/错误,请告诉我,但请不要撕裂我)我只是想知道我正在尝试做的事情是否可以完成。

4

1 回答 1

0

I suggest you call edge.func as many times as you need different selection criteria. If you don't know the column names a priori, you can always construct the T-SQL string you pass to edge.func dynamically. With this approach you would normally loose some optimizations around precompiled SQL statements, but given how MS SQL optimizes query execution on the server the savings are minimal.

于 2014-05-29T19:18:46.057 回答