2015-08-27 2 views
-3

SQL Server 2008 кидает ошибки при попытке записать следующий запрос, чтобы создать хранимую процедуру:SQL Server 2008 кидает «Объявите переменные таблицы» ошибки

DECLARE @T table (TimeId uniqueIdentifier)  

INSERT INTO @T 
    SELECT DISTINCT ref1.value('./@v', 'uniqueIdentifier') 
    FROM @xmlTimeIds.nodes('/a/i') T(ref1) 

UPDATE TAB1 
SET TAB1.TMAT_INVOICED_HOURS = 0  
FROM dbo.TMAT_TimeRegisterAttribute AS TAB1 
INNER JOIN @T on TAB1.TMAT_AT_GUID = @T.TimeId  
WHERE TAB1.TMAT_TN_GUID = @guidTenantId 
+5

Вы собираетесь показать ошибки? – duffn

+0

ошибка, код вашей хранимой процедуры может помочь – Abhishek

+0

Я бы предположил, что сообщение об ошибке сообщает вам, какая переменная была найдена необъявленной. Есть несколько ... Просто объявите переменные с подходящим типом и посмотрите, что происходит. – Shnugo

ответ

0

Дайте @T псевдоним в обновлении sql. Компилятор рассматривает @T как переменную, а не таблицу.

DECLARE @T table (TimeId uniqueIdentifier)  

INSERT INTO @T 
    SELECT DISTINCT ref1.value('./@v', 'uniqueIdentifier') 
    FROM @xmlTimeIds.nodes('/a/i') T(ref1) 

UPDATE TAB1 
SET TAB1.TMAT_INVOICED_HOURS = 0  
FROM dbo.TMAT_TimeRegisterAttribute AS TAB1 
INNER JOIN @T TempTable on TAB1.TMAT_AT_GUID = TempTable.TimeId  
    WHERE TAB1.TMAT_TN_GUID = @guidTenantId 
+0

Привет, Амир Спасибо за ваш ответ. Он работал для меня – sks

0

Вы on повторяется дважды: INNER JOIN @T on on TAB1.TMAT_AT_GUID = @T.TimeId. Должно быть так:

DECLARE @T table (TimeId uniqueIdentifier)  

INSERT INTO @T 
    SELECT DISTINCT ref1.value('./@v', 'uniqueIdentifier') 
    FROM @xmlTimeIds.nodes('/a/i') T(ref1) 

UPDATE TAB1 
SET TAB1.TMAT_INVOICED_HOURS = 0  
FROM dbo.TMAT_TimeRegisterAttribute AS TAB1 
INNER JOIN @T on TAB1.TMAT_AT_GUID = @T.TimeId  
WHERE TAB1.TMAT_TN_GUID = @guidTenantId 
Смежные вопросы