Найдено 5 результатов

DmitryG
Чт 28 апр 2016 11:39
Форум: SQL Server Data Access Components
Тема: TMSQuery.Options.AutoPrepare при работе с временными таблицами
Ответы: 6
Просмотры: 16831

Re: TMSQuery.Options.AutoPrepare при работе с временными таблицами

Спасибо.
Думаю, нам придётся использовать явное указание в опциях версию нативного клиента.
DmitryG
Ср 27 апр 2016 10:06
Форум: SQL Server Data Access Components
Тема: TMSQuery.Options.AutoPrepare при работе с временными таблицами
Ответы: 6
Просмотры: 16831

Re: TMSQuery.Options.AutoPrepare при работе с временными таблицами

Ранее мы использовали SDAC версии 6.0.1 и такой ошибки при работе с 2014 сервером не возникало.
DmitryG
Ср 27 апр 2016 06:24
Форум: SQL Server Data Access Components
Тема: TMSQuery.Options.AutoPrepare при работе с временными таблицами
Ответы: 6
Просмотры: 16831

Re: TMSQuery.Options.AutoPrepare при работе с временными таблицами

Код: Выделить всё

procedure TForm1.Button2Click(Sender: TObject);
var
  i: Integer;
  idArray: array [0..9] of Variant;
begin
  {MSQuery1.SQL.Text := if object_id('TempDb..#zzId') is not null drop table #zzId
  create table #zzId
  (
    inId int
  )
  }
  MSQuery1.ExecSQL; // Создание временной таблицы

  for i := 0 to 5 do
    idArray[i] := i;

  for i := 6 to 9 do
    idArray[i] := null;

  MSQuery2.Options.AutoPrepare := true;  // <<<<<<<<<<<

  for i := 0 to 9 do
    MSQuery2.ParamByName('Id_' + IntToStr(i + 1)).Value := idArray[i];

{ Вызов процедуры вставки 
MSQuery2.SQL.Text := exec dbo.pr_ZZPutId
    @in1 = :Id_1,
    @in2 = :Id_2,
    @in3 = :Id_3,
    @in4 = :Id_4,
    @in5 = :Id_5,
    @in6 = :Id_6,
    @in7 = :Id_7,
    @in8 = :Id_8,
    @in9 = :Id_9,
    @in10 = :Id_10  
}
  MSQuery2.Execute; 
end;
DmitryG
Ср 27 апр 2016 06:17
Форум: SQL Server Data Access Components
Тема: TMSQuery.Options.AutoPrepare при работе с временными таблицами
Ответы: 6
Просмотры: 16831

RE: TMSQuery.Options.AutoPrepare при работе с временными таблицами

Скрипт создания временной таблицы:

Код: Выделить всё

  if object_id('TempDb..#zzId') is not null drop table #zzId
  create table #zzId
  (
    inId int
  )
Скрипт процедуры для вставки во временную таблицу:

Код: Выделить всё

if object_id('dbo.pr_ZZPutId', 'P') is not null drop procedure dbo.pr_ZZPutId
go

create procedure dbo.pr_ZZPutId
    (
      @in1  integer = null,
      @in2  integer = null,
      @in3  integer = null,
      @in4  integer = null,
      @in5  integer = null,
      @in6  integer = null,
      @in7  integer = null,
      @in8  integer = null,
      @in9  integer = null,
      @in10  integer = null,
    )
    with encryption,
    execute as owner
  as
    insert into #zzId(inId) select @in1
    insert into #zzId(inId) select @in2
    insert into #zzId(inId) select @in3
    insert into #zzId(inId) select @in4
    insert into #zzId(inId) select @in5
    insert into #zzId(inId) select @in6
    insert into #zzId(inId) select @in7
    insert into #zzId(inId) select @in8
    insert into #zzId(inId) select @in9
    insert into #zzId(inId) select @in10

go
DmitryG
Пн 25 апр 2016 12:56
Форум: SQL Server Data Access Components
Тема: TMSQuery.Options.AutoPrepare при работе с временными таблицами
Ответы: 6
Просмотры: 16831

TMSQuery.Options.AutoPrepare при работе с временными таблицами

MS SQL Server 2014
Имеется хранимая процедура, посредством которой происходит вставка во временную таблицу.
При включенной опции происходит ошибка "Не удалось определить метаданные, поскольку инструкция "insert into #zzId(inId) select @in1" в процедуре "pr_ZZPutId" использует временную таблицу."
При работе с 2008 сервером подобной ошибки не возникает.