Как передать значения параметров запросу T-SQL

Если ваш файл непротиворечив, это сохранит вашу информацию в словаре:

with open('envparam.config') as f:
    data = {}
    for line in f:
        key, value = line.strip().split('=')
        data[key] = value

Затем вы можете получить к нему доступ следующим образом:

>>> data['DBSID']
SID
6
задан OMG Ponies 25 April 2011 в 16:00
поделиться

3 ответа

Попробуйте это:

EXEC sp_executesql @sql, N'@id int', @id

Больше информации в этой большой статье: http://www.sommarskog.se/dynamic_sql.html


Что касается вывода, должен выглядеть примерно так Ваш ВЫБОР:

SELECT @countVal = COUNT(id) FROM owner.myTable WHERE id = @id

Я выбираю 'идентификатор' вместо '*', чтобы не вытягивать ненужные данные...

Затем Ваш динамический sql должен быть чем-то вроде этого:

EXEC sp_executesql @sql, 
                   N'@id int, @countVal int OUTPUT', 
                   @id, 
                   @countVal OUTPUT

Этот пример адаптирован от той же статьи, связанной выше в разделе sp_executesql.


Что касается Вашей ошибки Oracle, необходимо будет узнать точный SQL, который sp_executesql отправляет Oracle. Если существует профилировщик или журнал запросов в Oracle, которая может помочь. Я ограничил опыт с Oracle, но это было бы следующим логическим шагом для поиска и устранения неисправностей Вашей проблемы.

17
ответ дан 8 December 2019 в 13:49
поделиться

Я не знаю, почему Вы - идентификатор передачи отдельно.

Вы могли сделать следующее
SET @sql = 'SELECT COUNT(*) FROM owner.myTable WHERE id = ' + @id

0
ответ дан 8 December 2019 в 13:49
поделиться

Быстрый и грязный путь состоит в том, чтобы просто создать строку перед использованием оператора EXEC, однако это не методические рекомендации, поскольку можно открыть себя до Внедрения SQL.

DECLARE @id int;
DECLARE @countVal int;
DECLARE @sql nvarchar(max);
SET @id = 1000;
SET @sql = 'SELECT COUNT(*) FROM owner.myTable WHERE id = ' + @id 
EXEC (@sql) AT oracleServer -- oracleServer is a lined server to Oracle

Корректный способ сделать это должно использовать системную хранимую процедуру sp_executesql, как детализировано венецианской вельможей, и рекомендуемый Microsoft в Книгах Онлайн:

EXEC sp_executesql @sql, N'@id int', @id
0
ответ дан 8 December 2019 в 13:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: