Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 object_id  [new]
`dmitry
Member

Откуда: Россия!
Сообщений: 64
Здравствуйте. Подскажите пожалуйста можно ли использовать эту функцию для связанного сервера (linked server)?
Если да - то поделитесь пожалуйста примером.
15 май 13, 16:53    [14300767]     Ответить | Цитировать Сообщить модератору
 Re: object_id  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
`dmitry, какая стоит задача?
15 май 13, 16:55    [14300785]     Ответить | Цитировать Сообщить модератору
 Re: object_id  [new]
Glory
Member

Откуда:
Сообщений: 104751
exec myserver.mydb..sp_executesql 'SELECT OBJECT_ID(''mytable'')'
15 май 13, 16:56    [14300792]     Ответить | Цитировать Сообщить модератору
 Re: object_id  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
я б так вытащил:

SELECT object_id FROM [server].[DB].sys.objects WHERE name like ''


Заметил, Glory как обычно thefirst)
15 май 13, 17:00    [14300816]     Ответить | Цитировать Сообщить модератору
 Re: object_id  [new]
`dmitry
Member

Откуда: Россия!
Сообщений: 64
Нужна проверка. Так не работает. Ошибка "Не удалось привязать составной идентификатор"

IF OBJECT_ID ([LinkedServer].[base1].[dbo].[AT#INFO] ) IS NOT NULL
...
16 май 13, 13:55    [14305363]     Ответить | Цитировать Сообщить модератору
 Re: object_id  [new]
Glory
Member

Откуда:
Сообщений: 104751
`dmitry
Нужна проверка. Так не работает. Ошибка "Не удалось привязать составной идентификатор"

И не должно работать. Согласно данному в хелпе синтаксису
16 май 13, 13:57    [14305371]     Ответить | Цитировать Сообщить модератору
 Re: object_id  [new]
`dmitry
Member

Откуда: Россия!
Сообщений: 64
Glory
`dmitry
Нужна проверка. Так не работает. Ошибка "Не удалось привязать составной идентификатор"

И не должно работать. Согласно данному в хелпе синтаксису


IF OBJECT_ID ('[LinkedServer].[base1].[dbo].[AT#INFO]' ) IS NOT NULL

без кавычек?
16 май 13, 14:05    [14305446]     Ответить | Цитировать Сообщить модератору
 Re: object_id  [new]
natya
Member [заблокирован]

Откуда: Азербайджан, Баку
Сообщений: 347
EXEC LinkedServer. Database.dbo.sp_executesql N'SELECT OBJECT_ID ("SchemaName. ObjectName") '
16 май 13, 14:07    [14305467]     Ответить | Цитировать Сообщить модератору
 Re: object_id  [new]
Glory
Member

Откуда:
Сообщений: 104751
`dmitry
без кавычек?

Причем тут кавычки ?
16 май 13, 14:08    [14305479]     Ответить | Цитировать Сообщить модератору
 Re: object_id  [new]
natya
Member [заблокирован]

Откуда: Азербайджан, Баку
Сообщений: 347
Вот пример запроса:

SELECT * FROM LinkedSRV.remote_database.dbo.remote_table

Обращаясь подобных образом к объектам удаленной базы данных можно вызывать хранимые процедуры, например:

EXEC LinkedSRV.remote_database.dbo.remote_stored_procedure @param = 10

-----------------------
Если при исполнении этой инструкции вы получите сообщение об ошибке "Server 'LinkedSRV' is not configured for RPC", вам потребуется настроить сервер для исполнения удаленных процедур. По умолчанию эта возможность отключена. Все настройки вашего сервера вы можете просмотреть, исполнив следующий код T-SQL:

exec sp_helpserver

Если в полученной таблице для связанного сервера нет записи 'rpc,rpc out', значит сервер не настроен для RPC.

Чтобы разрешить использование вызова удаленных процедур выполните следующий код:

exec sp_serveroption @server='LinkedSRV', @optname='rpc', @optvalue='true'
exec sp_serveroption @server='LinkedSRV', @optname='rpc out', @optvalue='true'

Теперь вы сможете вызывать хранимые процедуры с других серверов.
16 май 13, 14:12    [14305513]     Ответить | Цитировать Сообщить модератору
 Re: object_id  [new]
`dmitry
Member

Откуда: Россия!
Сообщений: 64
подскажите пожалуйста чем заменить такую конструкцию.
Скрипт писал не я. Знаний мало в этом вопросе.

...
BEGIN
IF OBJECT_ID ('[GR]' + @DB + '.[DBO].[TABLE1]') IS NOT NULL               --как заменить эту строку?
BEGIN
 ...


Все это работает локально если без обращения к линованному серверу.
30 май 13, 11:51    [14369038]     Ответить | Цитировать Сообщить модератору
 Re: object_id  [new]
Glory
Member

Откуда:
Сообщений: 104751
`dmitry
подскажите пожалуйста чем заменить такую конструкцию.

на один и предложенных вариантов
30 май 13, 11:53    [14369053]     Ответить | Цитировать Сообщить модератору
 Re: object_id  [new]
nezhadnye_my
Guest
`dmitry
Нужна проверка. Так не работает. Ошибка "Не удалось привязать составной идентификатор"

IF OBJECT_ID ([LinkedServer].[base1].[dbo].[AT#INFO] ) IS NOT NULL
...


так не катит, потому что см. БОЛ:
OBJECT_ID ( '[ database_name . [ schema_name ] . | schema_name . ] 
    object_name' [ ,'object_type' ] )

(максимум можно базу указать, но никак не другой сервер)

поэтому либо вызываем функцию на linked server-e,
как писали выше:
 exec('SELECT OBJECT_ID(''base1.dbo.[AT#INFO]'')') at  LinkedServer 

или
 EXEC LinkedServer.base1..sp_executesql N'SELECT OBJECT_ID (''dbo.[AT#INFO]'') ' 


либо, как тоже выше предлагали,
пишем запрос с указанием fully qualified names:

select object_id
from LinkedServer.base1.sys.objects
where name = '[AT#INFO]' and schema_id = (select schema_id 
                                        from LinkedServer.base1.sys.schemas
                                        where name = 'dbo');


если схема dbo, то еще короче:
select object_id
from LinkedServer.base1.sys.objects
where name = '[AT#INFO]' and schema_id = 1


Вам по исходу проверки в надо действия на каком сервере совершать?
если на исходном, к-ый ошибку выдает, то с. запрос выше,
а если после проверки идет, например, создание/удаление объекта на linked server,
то весь кусок кода надо выполнять на linked server.
вот пример:
EXEC (
'USE TempDB
IF OBJECT_ID(''dbo.Table1'') IS NOT NULL
DROP TABLE dbo.Table1'
) AT [FARAWAYSERVER];

и сайт, с к-ого пример взят(там еще кучка примеров)
31 май 13, 13:27    [14375498]     Ответить | Цитировать Сообщить модератору
 Re: object_id  [new]
`dmitry
Member

Откуда: Россия!
Сообщений: 64
DECLARE @q nvarchar(250)
    SET @q = 'select object_id from [LinkedServer].[base1].[sys].[objects] where name like 'AT#INFO';
	Exec sp_executesql @q

Понимаю что здесь ошибка. Подскажите пожалуйста. Если только запрос запускаю, то всё получается. Понимаю что 'AT#INFO' надо как то заключить кавычками по-другому. Не пинайте - признаю знаний мало...
7 июн 13, 11:43    [14405069]     Ответить | Цитировать Сообщить модератору
 Re: object_id  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
`dmitry
DECLARE @q nvarchar(250)
    SET @q = 'select object_id from [LinkedServer].[base1].[sys].[objects] where name like ''AT#INFO''';
	Exec sp_executesql @q

Понимаю что здесь ошибка. Подскажите пожалуйста. Если только запрос запускаю, то всё получается. Понимаю что 'AT#INFO' надо как то заключить кавычками по-другому. Не пинайте - признаю знаний мало...
7 июн 13, 11:44    [14405081]     Ответить | Цитировать Сообщить модератору
 Re: object_id  [new]
`dmitry
Member

Откуда: Россия!
Сообщений: 64
автор
Сергей Викт.,


Странный у Вас ответ -помощь...
7 июн 13, 12:03    [14405251]     Ответить | Цитировать Сообщить модератору
 Re: object_id  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
`dmitry
автор
Сергей Викт.,


Странный у Вас ответ -помощь...

Вы внимательно посмотрите, я же поправил в вашем же запросе... или что-то не так??? Вы хоть пробовали его скопировать и запустить? Или сразу сюда постите?
7 июн 13, 12:06    [14405287]     Ответить | Цитировать Сообщить модератору
 Re: object_id  [new]
нафига like
Guest
`dmitry,

нафига использовать LIKE без шаблона?
это же проверка на равенство:
like 'AT#INFO' <-> = 'AT#INFO'
7 июн 13, 12:23    [14405465]     Ответить | Цитировать Сообщить модератору
 Re: object_id  [new]
`dmitry
Member

Откуда: Россия!
Сообщений: 64
Мне надо проверить наличие объекта (таблицы) на линкованном сервере.
Выше предложили такой вариант. Вот и бьюсь с ним. Опыта нет.

Сергей Викторович - ИЗВИНЯЮСЬ ЗА НЕВНИМАТЕЛЬНОСТЬ.
7 июн 13, 12:33    [14405542]     Ответить | Цитировать Сообщить модератору
 Re: object_id  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
`dmitry
Мне надо проверить наличие объекта (таблицы) на линкованном сервере.
Выше предложили такой вариант. Вот и бьюсь с ним. Опыта нет.

Сергей Викторович - ИЗВИНЯЮСЬ ЗА НЕВНИМАТЕЛЬНОСТЬ.

всё ок, теперь работает?
7 июн 13, 12:34    [14405546]     Ответить | Цитировать Сообщить модератору
 Re: object_id  [new]
nezhadnye_my
Guest
`dmitry
Мне надо проверить наличие объекта (таблицы) на линкованном сервере.
Выше предложили такой вариант. Вот и бьюсь с ним. Опыта нет.

вот нифига не предлагалось с LIKE, а именно с равно,
я чего же, не помню, чего советую?
спрашивайте, чего непонятно, мне ответить не жалко,
только зачем правильно написанное корежить?
LIKE для частичного совпадения используется, а вовсе не взамен равенства.
потому в нем и шаблоны.
7 июн 13, 13:14    [14405824]     Ответить | Цитировать Сообщить модератору
 Re: object_id  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
nezhadnye_my
`dmitry
Мне надо проверить наличие объекта (таблицы) на линкованном сервере.
Выше предложили такой вариант. Вот и бьюсь с ним. Опыта нет.

вот нифига не предлагалось с LIKE, а именно с равно,
я чего же, не помню, чего советую?
спрашивайте, чего непонятно, мне ответить не жалко,
только зачем правильно написанное корежить?
LIKE для частичного совпадения используется, а вовсе не взамен равенства.
потому в нем и шаблоны.
А что, сервер дурак что ли?
Не знает, что LIKE без wildcards - всё равно что оператор "=" ?
7 июн 13, 13:17    [14405854]     Ответить | Цитировать Сообщить модератору
 Re: object_id  [new]
nezhadnye_my
Guest
iap,

тут проблемы не у сервера, а у ТС.
я его подталкиваю к чтению BOL на предмет LIKE.
хорошо заниматься самодеятельностью, когда понимаешь, зачем то на это сменил.
вот в данном случае мне интересно, чем его мое = не устраивает.
7 июн 13, 13:22    [14405904]     Ответить | Цитировать Сообщить модератору
 Re: object_id  [new]
`dmitry
Member

Откуда: Россия!
Сообщений: 64
nezhadnye_my
`dmitry
Мне надо проверить наличие объекта (таблицы) на линкованном сервере.
Выше предложили такой вариант. Вот и бьюсь с ним. Опыта нет.

вот нифига не предлагалось с LIKE, а именно с равно,
я чего же, не помню, чего советую?
спрашивайте, чего непонятно, мне ответить не жалко,
только зачем правильно написанное корежить?
LIKE для частичного совпадения используется, а вовсе не взамен равенства.
потому в нем и шаблоны.


Сергей Викт.
я б так вытащил:

SELECT object_id FROM [server].[DB].sys.objects WHERE name like ''


вот - предлагали...
7 июн 13, 16:19    [14407338]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить