Как я определяю, является ли столбец столбцом идентификационных данных в 2000 MSSQL?

Общие рекомендации по устранению неполадок «Нет ошибок для чтения из сокета».

Эти ошибки обычно вызваны другой серьезной ошибкой, например ошибкой ORA-600. Проблема настолько серьезная, что серверный процесс разбился и даже не мог отправить правильное сообщение об ошибке клиенту. (Другой распространенной причиной этих ошибок является сетевое отключение, вызванное SQLNET.EXPIRE_TIME или другим процессом, который убивает старые сеансы.)

Посмотрите на журнал предупреждений, чтобы узнать исходное сообщение об ошибке.

Найдите файл alert_ [name] .log в этом каталоге: select value from v$parameter where name = 'background_dump_dest';

После того, как вы найдете конкретное сообщение об ошибке и подробную информацию, перейдите на страницу support.oracle.com. Используйте «инструмент ora-600», а затем найдите первое число после сообщения ORA-600.

Обычно для этого типа ошибки ORA-600 будет одна или несколько статей. Используйте точную версию и платформу, чтобы сузить список возможных ошибок. (Но не удивляйтесь, если «Версии, затронутые» в этой статье, неверны. Требования Oracle к «исправлены в версии xy» не всегда верны.)

В статьях обычно объясняются более подробно, как проблема, возможные обходные пути и решение, которое обычно включает исправление или обновление.

На практике редко вы хотите решить эти проблемы. «Типичный» совет - обратиться в службу поддержки Oracle, чтобы убедиться, что у вас действительно есть одна и та же проблема, получить патч, получить разрешение и скрыть среду (ы), а затем применить патч. А потом, вероятно, поймите, что патч не работает. Поздравляем, вы просто потратили много времени.

Вместо этого вы обычно можете избегать проблемы с тонким изменением запроса или процедуры. В Oracle есть много возможностей, почти всегда есть другой способ сделать это. Если код окажется немного странным, добавьте комментарий, чтобы предупредить будущих программистов: «Этот код выглядит странным, чтобы избежать ошибки X, которая должна быть исправлена ​​в версии Y.»

Конкретный совет для этого кода

Если это действительно ваша целая процедура, вы должны заменить ее на что-то вроде этого:

insert into local.tab3(col1, col2, col3, col4)
select tab1.col1, tab1.col2, tab2.col1, tab2.col2
from tab1@dblink1 tab1
join tab2@dblink1 tab2
    on tab1.col1 = tab2.col1
    and tab1.col2 = tab2.col2;

В общем, вы всегда должны делать что-то в SQL, если это возможно. Особенно, если вы можете избежать открытия многих курсоров. И особенно , если вы можете избежать открытия многих курсоров в удаленной базе данных.

27
задан Alexander Prokofyev 28 October 2008 в 13:32
поделиться

3 ответа

Можно также сделать это этот путь:

select columnproperty(object_id('mytable'),'mycolumn','IsIdentity')

Возвраты 1, если это - идентификационные данные, 0 если нет.

64
ответ дан Blorgbeard 14 October 2019 в 12:35
поделиться
sp_help tablename 

В выводе ищут что-то вроде этого:

 Identity     Seed     Increment     Not For Replication    
 -----------  -------  ------------  ---------------------- 
 userid       15500    1             0        
19
ответ дан Patrick McElhaney 14 October 2019 в 12:35
поделиться

Корректируйтесь WHERE пункт для удовлетворения:

select
    a.name as TableName,
    b.name as IdentityColumn
from
    sysobjects a inner join syscolumns b on a.id = b.id
where
    columnproperty(a.id, b.name, 'isIdentity') = 1
    and objectproperty(a.id, 'isTable') = 1
4
ответ дан Luke Bennett 14 October 2019 в 12:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: