SQL запрос серийный номер - PullRequest
       3

SQL запрос серийный номер

0 голосов
/ 10 октября 2011

Я написал хранимую процедуру в SQL Server 2000. Мне нужен серийный номер для выходной таблицы.Поэтому, когда я запускаю этот сохраненный процесс, я получаю эту ошибку:

Явное значение для столбца идентификаторов в таблице '# tmpSearchResults1' может быть указано, только если используется список столбцов и IDENTITY_INSERT включен.

Я пытался с set IDENTITY_INSERT #tmpSearchResults1 on

Create Procedure dbo.usp_mobile_All_KeyWord(@searchkey varchar(30))                                        
AS          
CREATE TABLE #tmpSearchResults        
(                                                 
 property_id varchar(255),                                                          
 property_number varchar(255),                                                          
 auction_date_reason  varchar(255)                                        
) 

INSERT INTO #tmpSearchResults         

SELECT              

 p.property_id, p.property_number, p.auction_date_reason                                                             
   FROM                                                              
 Pr p               
 INNER JOIN                                                              
 Au a ON p.auction_id = a.auction_id                                                                
 INNER JOIN                                         
 PrAdd pa ON p.property_id = pa.property_id                                        

 INNER JOIN state AS s ON s.state_id=pa.state                
 where            
   (        
   (p.archive = 'N'               

 AND                                                     
 a.show_on_site = 'Y'                                                              
 AND                                                              
 (        
 (        
 ((p.auction_date >= CONVERT(datetime, CONVERT(varchar, GETDATE(), 103), 103) and  (p.auction_date_reason is null or p.auction_date_reason = ''))        
 or         
 (p.auction_date <= CONVERT(datetime, CONVERT(varchar, GETDATE(), 103), 103) and  ( p.auction_date_reason = 'Accepting Offers' )))        
 and        

 pa.property_address_type_id = 1 )) )        
  and         
  (state_abbreviation=@searchkey or  s.state_name like '%'+''+ @searchkey +''+'%' or city  like '%'+''+ @searchkey +''+'%' or  pa.address1 like '%'+''+ @searchkey +''+'%'        
          or  pa.address2 like '%'+''+ @searchkey +''+'%')         
 )      

)         


 CREATE TABLE #tmpSearchResults1        
(            
i1 int identity,                                          
 property_id varchar(255),                                                          
 property_number varchar(255),                                                          
 auction_date_reason  varchar(255)    
)        
 insert into #tmpSearchResults1      

 select     
property_id ,                                                          
 property_number,                                                          
 auction_date_reason                                            

 from #tmpSearchResults       

 order by        
 case when charindex(@searchkey,state) >0 then 1000 else 0 end desc,        
  case when charindex(@searchkey,statename) >0 then 1000 else 0 end desc,        
 case when charindex(@searchkey,city) >0 then 1000 else 0 end desc,         
 case when charindex(@searchkey,address2) >0 then 1000 else 0 end desc,        
 case when charindex(@searchkey,address1) >0 then 1000 else 0 end desc,        
 case when charindex(@searchkey,short_description) >0 then 1000 else 0 end desc      

 select * from #tmpSearchResults1     

Плз, помогите мне

Ответы [ 2 ]

5 голосов
/ 10 октября 2011

Код ошибки очень и очень понятен.

Соответствующая часть: ...when a column list is used....

Вам необходимо указать список столбцов в INSERTзаявление.

INSERT INTO #tmpSearchResults
(i1, 
 property_id,                                                          
 property_number,                                                          
 auction_date_reason)         

SELECT              

 p.property_id, p.property_number, p.auction_date_reason                                                             
   FROM... 
0 голосов
/ 10 октября 2011

Во-первых, в части SELECT вашего второго оператора слишком много запятой:

 insert into #tmpSearchResults1      

 select     
     property_id ,                                                          
     property_number,                                                          
     auction_date_reason  , <-- THIS ONE!!                                      

 from #tmpSearchResults 

Последний столбец оператора SELECT должен быть без запятой.
Итакэто было бы правильно:

 insert into #tmpSearchResults1      

 select     
     property_id ,                                                          
     property_number,                                                          
     auction_date_reason                                 

 from #tmpSearchResults

Во-вторых, вы читали эту часть сообщения об ошибке?

Явное значение [...] можно указать только когда используется список столбцов

Часть «список столбцов» означает, что вы должны указать столбцы в части INSERT:

 insert into #tmpSearchResults1  
     (property_id, property_number, auction_date_reason)

 select     
     property_id ,                                                          
     property_number,                                                          
     auction_date_reason                                 

 from #tmpSearchResults

Вы можетеизбегайте указания столбцов, если число столбцов в операторе SELECT такое же, как в таблице, в которую они должны быть вставлены (и если типы данных совпадают).
Если одно из этих условий не соответствуетвстретились, вам нужно указать столбцы, потому что в противном случае SQL Server не знает, какое значение вставить в какой столбец.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...