Каков наилучший способ прочитать значение столбца с кавычкой и вставить в другую таблицу? - PullRequest
1 голос
/ 19 марта 2012

Эй, у меня есть столбец имени в моей таблице, предположим, что у меня есть имя O'Neil, когда я читаю это имя и вставляю в связанный сервер через динамический SQL, я получаю сообщение об ошибке ... Как справиться с этим ... Один из способов - проверить, есть ли у моего имени кавычка ('), но я выясняю, может ли кто-то ответить

мой динамический SQL выглядит 'name =' + @ quote + @ name + @ quote

@ цитата только ниже ... set @quote = '' ''

спасибо, Naga

Ответы [ 2 ]

2 голосов
/ 19 марта 2012

Я думаю, что ваша проблема может быть продемонстрирована с помощью этого кода:

declare @Name varchar(20)
set @Name = 'O''Neil'
declare @SQL nvarchar(100)
set @SQL = 'select '+@Name
exec (@SQL)

Результат: Unclosed quotation mark after the character string 'Neil'.

Вы можете использовать quotename , чтобы правильно добавить символы кавычек:

set @SQL = 'select '+quotename(@Name, '''')

Лучшей альтернативой является использование sp_executesql и передача @Name в качестве параметра.

set @SQL = 'select @Name'
exec sp_executesql @SQL, N'@Name varchar(20)', @Name
0 голосов
/ 20 марта 2012

Если вы можете использовать PreparedStatements, тогда это лучший способ вставки / обновления многих строк. Такой код в Jython (с использованием Javas JDBC) выглядит так:

db = DriverManager.getConnection(jdbc_url, usr, passwd)
pstm = db.prepareStatement("insert into test (lastname) values (?)")
pstm.setString(1, "O'Neil")
reccnt = pstm.execute()

Подобное PreparedStatement вы найдете в ODBC, .net и т. Д. Он должен быть намного легче для базы данных для массивных вставок, а затем создавать полный оператор вставки SQL для каждого вставленного значения.

Такая массивная вставка из файла CSV может выглядеть так:

pstm = db.prepareStatement("insert into test (lastname) values (?)")
while not csvfile.eof():
    lastname = csvfile.next_line()[0]
    pstm.setString(1, lastname)
    reccnt = pstm.execute()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...