2013-03-01 3 views
2
<CFQUERY Name="LoadCompletions" datasource="#request.datasource#"> 
SELECT n.*, u.UserID into ##Completions 
FROM 
    OPENROWSET(
     'Microsoft.ACE.OLEDB.12.0', 
     'Excel 12.0;HDR=YES;Database=#Destination_File#', 
     'SELECT * FROM [Sheet1$]') n 
    inner join LE_User u on 's'+n.id = u.login_name 
</cfquery> 

Я проверил все Google, чтобы узнать, что означает ## Completions. Может ли кто-нибудь помочь мне, пожалуйста? Когда я пытаюсь свалить его, он дает то же самое ## Completions.## перед переменной Coldfusion

ответ

8

## должен покинуть литерал #, поэтому он является частью SQL, переданной в базу данных. (В отличие от маркировки хеш-выражения CFML.)

#tablename - синтаксис Microsoft SQL Server для local temporary table.

бит Completions бит - это просто произвольное имя таблицы (поэтому поиск его не принесет ничего важного).

Обратите внимание, что существуют также глобальные временные таблицы, написанные как ##tablename, которые должны быть экранированы до ####tablename в cfquery.

+0

Спасибо Peter ... – Indy

+0

Только один вопрос. Вы сказали, что это локальная временная таблица с одним #, действующим как листинг, но в ссылке, которую вы дали, говорится: ## tablename - глобальная временная таблица. Итак, чтобы создать глобальную таблицу temp, это должно быть ### tablename при использовании Coldfusion? – Indy

+0

Нет, потому что для экранирования требуются пары, поэтому '### tablename' будет экранированным хэшем, за которым следует нераскрытое хеш-выражение (поэтому синтаксическая ошибка). У вас должно быть четное количество хешей. (Это не отличается от того, как экранирование работает на других языках - например, в JS, вы не можете писать '\ '' '' - вы должны делать '\' \ '\'' - это в основном то же самое.) –

Смежные вопросы