Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: OPENQUERY и передача параметра  [new]
это он
Member [заблокирован]

Откуда: ★★★ ☭ ★★★
Сообщений: 729
Помогите. Почему ругается?

  set @sql = 'insert into #tt(ttagnname, ttrn) select agnname, rn from openquery(parus,' + @parus + ')'
или даже так
  set @sql = 'select * into #tt from openquery(parus,' + @parus + ')'

Пишет:

[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'select'.

sql 2000, linked к oracle
15 дек 08, 11:36    [6570657]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
Glory
Member

Откуда:
Сообщений: 104751
Incorrect syntax near the keyword 'select' означает, что вы запрос неправильно составили
Вы видели текст того запроса, что запускате в @sql ?
15 дек 08, 11:38    [6570671]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
это он
Member [заблокирован]

Откуда: ★★★ ☭ ★★★
Сообщений: 729
Glory,

да вот он:
  select @parus =  'select UDO_V_agnlist.agnname, UDO_V_ins_policy.rn
	              from UDO_V_agnlist, UDO_V_ins_policy
	              where 
	              (UDO_V_agnlist.rn = UDO_V_ins_policy.insured) 
		  and 
		  (UDO_V_ins_policy.code = ' +@cpolicynumber+ ')'

тут все на месте, в оракле этот запрос работает.
15 дек 08, 11:40    [6570694]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
Glory
Member

Откуда:
Сообщений: 104751
это он
Glory,

да вот он:
  select @parus =  'select UDO_V_agnlist.agnname, UDO_V_ins_policy.rn
	              from UDO_V_agnlist, UDO_V_ins_policy
	              where 
	              (UDO_V_agnlist.rn = UDO_V_ins_policy.insured) 
		  and 
		  (UDO_V_ins_policy.code = ' +@cpolicynumber+ ')'

тут все на месте, в оракле этот запрос работает.

Нет. Это присвоение переменной значения
А я говорю о конечном тексте динамического запроса
15 дек 08, 11:42    [6570712]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
это он
Member [заблокирован]

Откуда: ★★★ ☭ ★★★
Сообщений: 729
у меня вот такой код:

  select @parus =  'select UDO_V_agnlist.agnname, UDO_V_ins_policy.rn
	              from UDO_V_agnlist, UDO_V_ins_policy
	              where 
	              (UDO_V_agnlist.rn = UDO_V_ins_policy.insured) 
		  and 
		  (UDO_V_ins_policy.code = ' +@cpolicynumber+ ' )'
	
  set @sql = 'select * into #tt from openquery(parus,' + @parus + ')'
  exec (@sql) 

посмотреть что в @sql перед выполнением не могу, в QA в debug не понимаю как добавить переменную в watch
15 дек 08, 11:50    [6570779]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
Glory
Member

Откуда:
Сообщений: 104751
это он
у меня вот такой код:

  select @parus =  'select UDO_V_agnlist.agnname, UDO_V_ins_policy.rn
	              from UDO_V_agnlist, UDO_V_ins_policy
	              where 
	              (UDO_V_agnlist.rn = UDO_V_ins_policy.insured) 
		  and 
		  (UDO_V_ins_policy.code = ' +@cpolicynumber+ ' )'
	
  set @sql = 'select * into #tt from openquery(parus,' + @parus + ')'
  exec (@sql) 

посмотреть что в @sql перед выполнением не могу, в QA в debug не понимаю как добавить переменную в watch

Сделайте select @sql или print @sql
15 дек 08, 11:51    [6570791]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
это он
Member [заблокирован]

Откуда: ★★★ ☭ ★★★
Сообщений: 729
вот так все работает

  select @parus =  'select UDO_V_agnlist.agnname, UDO_V_ins_policy.rn'+
	              ' from UDO_V_agnlist, UDO_V_ins_policy' +
	              ' where' +
	              ' (UDO_V_agnlist.rn = UDO_V_ins_policy.insured)' +
		            ' and'+ 
		            ' (UDO_V_ins_policy.code = ''''' + @cpolicynumber + ''''')'
	
    set @sql = 'select * from openquery(parus,''' + @parus + ''')'
    exec(@sql)  

Glory, большое спасибо
15 дек 08, 12:38    [6571186]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: OPENQUERY и передача параметра  [new]
tosick4
Member

Откуда:
Сообщений: 92
Есть такой запрос (рабочий):
set nocount on;
declare @d datetime;
declare @beg datetime, @end datetime;
set @d=GETDATE();
set @beg = convert(datetime,convert(varchar(20),@d,104),104);
set @end  = dateadd(day,1,@beg);
DECLARE @c_finished_card INT;
DECLARE @user_name VARCHAR (500);


select @c_finished_card=T from openquery(ora_work,'	
	SELECT count(distinct(cr.client_id)) T FROM  t_client_register cr, t_users u
       WHERE u.user_id = cr.user_id
       AND   trunc(cr.date_ins) = trunc(sysdate)
       AND   u.user_name = ''ATS''
       ');       
SELECT @c_finished_card


В результате выдает число записанное в @c_finished_card. Вопрос: как переделать эту конструкцию чтобы вместо "ATS" можно было подставлять значение переменной @user_name (этот запрос будет выполняться в курсоре)
Понимаю что нужна динамика, но данная ветка (да и другие) не помогли :(
10 июл 13, 11:56    [14545887]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
ora_work
Guest
tosick4,

exec ('select ... where ... AND   u.user_name = ?', @MyParam) at ora_work
10 июл 13, 13:04    [14546403]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
tosick4
Member

Откуда:
Сообщений: 92
ora_work
tosick4,

exec ('select ... where ... AND   u.user_name = ?', @MyParam) at ora_work

А как описать ora_work? Не понятно. Напишите поподробнее.
10 июл 13, 13:27    [14546613]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
tosick4
А как описать ora_work? Не понятно. Напишите поподробнее.

как линкед сервер к ораклу с названием ora_work
10 июл 13, 13:31    [14546652]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
ora_work
Guest
tosick4
ora_work
tosick4,

exec ('select ... where ... AND   u.user_name = ?', @MyParam) at ora_work

А как описать ora_work? Не понятно. Напишите поподробнее.


zamenite
set nocount on;
declare @d datetime;
declare @beg datetime, @end datetime;
set @d=GETDATE();
set @beg = convert(datetime,convert(varchar(20),@d,104),104);
set @end  = dateadd(day,1,@beg);
DECLARE @c_finished_card INT;
DECLARE @user_name VARCHAR (500);


select @c_finished_card=T from openquery(ora_work,'	
	SELECT count(distinct(cr.client_id)) T FROM  t_client_register cr, t_users u
       WHERE u.user_id = cr.user_id
       AND   trunc(cr.date_ins) = trunc(sysdate)
       AND   u.user_name = ''ATS''
       ');       
SELECT @c_finished_card

na

declare @c_finished_card  int
declare  @user_name  varchar(100) = ''
exec ('
	SELECT ? = count(distinct(cr.client_id))  FROM  t_client_register cr, t_users u
       WHERE u.user_id = cr.user_id
       AND   trunc(cr.date_ins) = trunc(sysdate)
       AND   u.user_name = ?', @c_finished_card  output,  @user_name ) at ora_work
10 июл 13, 13:45    [14546751]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
tosick4
Member

Откуда:
Сообщений: 92
ora_work,

А где описание openquery? А так он выдает ошибку:
Server 'ora_work' is not configured for RPC.
10 июл 13, 13:54    [14546820]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
tosick4
Member

Откуда:
Сообщений: 92
tosick4,



DECLARE @c_finished_card INT;
DECLARE  @user_name  VARCHAR(100) = ''
exec ('
	SELECT ? = count(distinct(cr.client_id))  FROM  t_client_register cr, t_users u
       WHERE u.user_id = cr.user_id
       AND   trunc(cr.date_ins) = trunc(sysdate)
       AND   u.user_name = ?', @c_finished_card  output,  @user_name ) at ora_work


Также выдает ошибку:
Cannot assign a default value to a local variable.
Must declare the scalar variable "@user_name".
10 июл 13, 14:09    [14546983]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
DECLARE @user_name VARCHAR(100)
SET @user_name = ''
10 июл 13, 14:13    [14547016]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
tosick4
Member

Откуда:
Сообщений: 92
Maxx,
Снова грусть

автор
OLE DB provider "MSDAORA" for linked server "ora_work" returned message "Произошла одна или несколько ошибок во время обработки команды.".
OLE DB provider "MSDAORA" for linked server "ora_work" returned message "ORA-00923: FROM keyword not found where expected
".
Сообщение 7215, уровень 17, состояние 1, строка 5
Could not execute statement on remote server 'ora_work'.
10 июл 13, 14:39    [14547221]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
exec ('
	SELECT ? = count(distinct(cr.client_id)) T FROM  t_client_register cr, t_users u
       WHERE u.user_id = cr.user_id
       AND   trunc(cr.date_ins) = trunc(sysdate)
       AND   u.user_name = ?', @c_finished_card  output,  @user_name ) at ora_work
10 июл 13, 15:00    [14547384]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
Гость333
Member

Откуда:
Сообщений: 3683
tosick4
SELECT ? = count(distinct(cr.client_id))  FROM ...

В Oracle другой синтаксис присваивания:
SELECT count(distinct(cr.client_id)) INTO ? FROM ...

Хотя, скорее всего, и это не пройдёт.
10 июл 13, 15:05    [14547427]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
tosick4
Member

Откуда:
Сообщений: 92
Maxx,
Тоже самое.
10 июл 13, 15:08    [14547448]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
tosick4
Member

Откуда:
Сообщений: 92
Гость333


В Oracle другой синтаксис присваивания:
SELECT count(distinct(cr.client_id)) INTO ? FROM ...



Тоже самое

автор
Сообщение 7215, уровень 17, состояние 1, строка 4
Could not execute statement on remote server 'ora_work'.
10 июл 13, 15:11    [14547471]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
s
et nocount on;
declare @d datetime;
declare @beg datetime, @end datetime;
set @d=GETDATE();
set @beg = convert(datetime,convert(varchar(20),@d,104),104);
set @end  = dateadd(day,1,@beg);
DECLARE @c_finished_card INT;
DECLARE @user_name VARCHAR (500) = 'ATS';
DECLARE @str varchar(2000)

set @str = 'select @c_finished_card=T from openquery(ora_work,''	
	SELECT count(distinct(cr.client_id)) T FROM  t_client_register cr, t_users u
       WHERE u.user_id = cr.user_id
       AND   trunc(cr.date_ins) = trunc(sysdate)
       AND   u.user_name =''' + @user_name + ''')'
exec sp_executesql @str, '@c_finished_card int output' ,@c_finished_card  output
10 июл 13, 15:19    [14547528]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
tosick4
Member

Откуда:
Сообщений: 92
Maxx,

Теперь такое:

автор
Сообщение 214, уровень 16, состояние 2, процедура sp_executesql, строка 1
Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'.
10 июл 13, 15:33    [14547627]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
tosick4,

:(
DECLARE @str varchar(2000)
DECLARE @str nvarchar(2000)
10 июл 13, 15:36    [14547656]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
tosick4
Member

Откуда:
Сообщений: 92
Maxx,

не поменялось :((

автор
Сообщение 214, уровень 16, состояние 3, процедура sp_executesql, строка 1
Procedure expects parameter '@parameters' of type 'ntext/nchar/nvarchar'.
10 июл 13, 15:39    [14547679]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
tosick4
Maxx,

не поменялось :((
Поразительная беспомощность...
set nocount on;
declare @d datetime;
declare @beg datetime, @end datetime;
set @d=GETDATE();
set @beg = convert(datetime,convert(varchar(20),@d,104),104);
set @end  = dateadd(day,1,@beg);
DECLARE @c_finished_card INT;
DECLARE @user_name VARCHAR (500) = 'ATS';
DECLARE @str nvarchar(2000)

set @str = N'select @c_finished_card=T from openquery(ora_work,''	
	SELECT count(distinct(cr.client_id)) T FROM  t_client_register cr, t_users u
       WHERE u.user_id = cr.user_id
       AND   trunc(cr.date_ins) = trunc(sysdate)
       AND   u.user_name =''' + @user_name + ''')'
exec sp_executesql @str, N'@c_finished_card int output' ,@c_finished_card  output
10 июл 13, 15:47    [14547756]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить