powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите разобраться с OPENROWSET
5 сообщений из 5, страница 1 из 1
Помогите разобраться с OPENROWSET
    #32025315
Konnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть SQL2000 sp1
Пишу хранимую процедуру, которая с помощью OPENROWSET из DBFовского файла должна выбираеть нужные данные.
Вот текст процедуры
set nocount on
set quoted_identifier off
set ansi_nulls on
set ansi_warnings on
declare @str_SQL varchar(1000), -- Строка запроса
@dBegin smalldatetime,
@dEnd smalldatetime,
@str1 varchar(120),
@str2 varchar(120),
@str3 varchar(120),
@str4 varchar(120),
@sDBegin char(10), -- Дата начала периода (строка)
@sDEnd char(10) -- Дата окончания петиода (строка)

/* Создаем временную таблицу для переноса списка накладных,
в которых указан данный путевой лист*/
create table #TTNDBF (nTTN_ID numeric(8,0), -- ID накладной из старой базы
cTTN char(, -- Номер накладной
dTTN smalldatetime, -- Дата выписки накладной
cPrizPost char(1) NULL, -- Признак поставщика: П - предприятие, О - организация, Э - экспедитор
nPost numeric (8,0) NULL, -- ID поставщика (подразделение комбината, экспедитор или точка)
cPrizPotr char(1) NULL, -- Признак потребителя, то же что и признак поставщика
nPotr numeric (8,0) NULL, -- ID потребителя
nClient numeric (8,0) NULL, -- ID клиента, если необходимо
nPL_ID char(6) -- ID путевого листа из старой базы
)
select @dBegin=getdate(),@dEnd=getdate()
select @sDBegin=convert(char(10),@dBegin,110), @sDEnd=convert(char(10),@dBegin,110)
-- Формируем строку запроса
select @str1=" insert into #TTNDBF (nTTN_ID, cTTN, dTTN, nClient, nPL_ID)",
@str2=" select * from openrowset('MSDASQL','Driver={Microsoft dBase VFP Driver (*.dbf)};DBQ=l:\base;SourceType=DBF;',",
@str3=" 'select TTN.C_TTN, TTN.N_TTN, TTN.D_TTN, TTN.C_BUYER, TTN_DOP.PU_LIST from TTN, TTN_DOP where ",
@str4="TTN.D_TTN>={"+@sDBegin+"} and TTN.D_TTN<={"+@sDEnd+"} and TTN_DOP.C_TTN=TTN.C_TTN')"
select @str_SQL=@str1+@str2+@str3+@str4
exec(@str_SQL)
select * from #TTNDBF
drop table #TTNDBF

Если запускаю эту процедуру, то получаю ошибку
Server: Msg 7405, Level 16, State 1, Line 1
Heterogeneous queries require the ANSI_NULLS and ANSI_WARNINGS options to be set for the connection. This ensures consistent query semantics. Enable these options and then reissue your query.

Если же все это набираю в Query Analyzer, то все проходит без проблем.
С уважением, Николай
...
Рейтинг: 0 / 0
Помогите разобраться с OPENROWSET
    #32025328
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так все же в сообщении написано

В QA набираете

SET ANSI_NULLS ON
GO
SET ANSI_WARNINGS ON
GO
CREATE PROCEDURE myproc AS ...

GO
и будет вам ваша процедура
...
Рейтинг: 0 / 0
Помогите разобраться с OPENROWSET
    #32025334
Konnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, Glory!!!
Но почему установка
set ansi_nulls on
set ansi_warnings on
в теле процедуры, не влияет?
С уважением, Николай!
...
Рейтинг: 0 / 0
Помогите разобраться с OPENROWSET
    #32025335
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А объяснение простое

BOL
The setting of SET ANSI_NULLS is set at execute or run time and not at parse time .

Т.к. batch рассматривается как одно целое, то на момент его компиляции действуют установки, выполненные до него, но не те, которые устанавливаются в нем самом. Т.е. если бы вам вдруг удалось "проскачить" этап компиляции, то ваш batch безусловно бы сработал.
...
Рейтинг: 0 / 0
Помогите разобраться с OPENROWSET
    #32025339
Konnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз спасибо!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите разобраться с OPENROWSET
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]