2015-09-03 61 views
0

我有一個存儲過程是這樣的:如何從存儲過程的輸入值插入表以及臨時表

create procedure spname 
    @ID varchar, 
    @name varchar, 
    @R xml 
AS 
BEGIN 
    -- Getting values XML 
    create table #Table 
    (
     country varchar, 
     status varchar 
    ) 

我有基於所述條件的值,以插入表,如果ID,來自存儲過程輸入和國家(來自臨時表)的名稱不存在,然後插入。我不知道如何加入所有這些的確切語法。不過我在下面嘗試,但我認爲它錯了,我想我必須使用一些循環技術,如光標?

DECLARE @Country VARCHAR; 

SELECT @Country = C.Country 
FROM #Table C 

INSERT INTO MyTable(Id, Name, Country) 
VALUES (@Id, @Name, @Country) 
FROM 
    WHERE NOT EXISTS (SELECT 1 FROM MyTable mT 
         WHERE ID = @Id 
         AND Name = @Name 
         AND mt.country = C.country) 

我想有價值觀錯誤的語法以及它不會成爲我的目的,臨時表中含有大量的值

我使用光標想出了一個解決辦法是這樣的:

DECLARE @country VARCHAR 

    DECLARE CountryCur CURSOR FOR 
     SELECT Country FROM #Temp 

    OPEN CountryCur 

    FETCH NEXT FROM CountryCur INTO @Country 

    WHILE @@FETCH_STATUS = 0 
    BEGIN 
     INSERT INTO MyTable(Id, Name, Country) 
     VALUES (@id, @name, @Country) 
     WHERE NOT IN (SELECT 1 FROM MyTable mT 
         WHERE mT.Id = @Id 
         AND mT.name = @name 
         AND mT.country = @Country) 

     FETCH NEXT FROM CountryCur INTO @Country 
     CLOSE CountryCur 
     DEALLOCATE CountryCur 

然而,它顯示了不遠的地方語法錯誤。不知道什麼是錯的。

+0

什麼XML參數值是什麼樣子? –

+0

@ M.Ali:XML您不必擔心,因爲我將它轉換爲臨時表。我沒有在這裏列入。所以基本上它從臨時表和輸入參數,我需要檢查表中存在的行。如果不是,則插入。所以我提出了上面的解決方案,不確定它是否有用,但我也在附近得到語法錯誤。我對這兩個問題有任何線索? – Learner

回答

3

以及你剛纔提到你在#temp表從XML來的數據,那麼它應該是爲簡單

INSERT INTO MyTable(Id,Name,Country) 
SELECT @Id, @Name, t.Country 
FROM #Table t 
WHERE NOT EXISTS (SELECT 1 
        FROM MyTable mT 
        WHERE mt.ID = @Id 
        AND mt.Name = @Name 
        AND mt.country= t.country) 

沒有光標需要

+0

你是完全正確的,但在你的條件下的ID和名稱也應該與山?正確? – Learner

+1

是的,它應該來自mt表。 –

+0

所有的好,我的SP執行:)非常感謝。事實上,我的建築師給了我你提供的相同的代碼,但我很傻我沒有運行它,並使用光標等使它複雜化。現在我意識到它非常簡單。再次感謝。祝你今天愉快 – Learner

-2

你需要使用SELECT ... INTO,而不是VALUES(),如下:

INSERT INTO MyTable(
      Id, 
      Name, 
      Country 
     ) 
      select @ID, @Name, @Country 
      WHERE not exists(select 1 from MyTable 
       WHERE ID = @Id 
       AND Name = @Name 
       AND country in (Select country from #Temp)) 
+0

哇怎麼來插入和從同一張表中選擇?你看起來很簡單,我不認爲它是我之後的解決方案? – Learner

+0

你好,你住在墨爾本,對不對?這是不正確的隊友,對不起。 – Learner

+0

根據#temp表中包含多個國家/地區的新信息,我編輯了我的答案。請檢查。 – Harsh

相關問題