2017-10-19 71 views
0

我有在SQL中使用SQL變量的一些問題,我不是很清楚我該如何正確地使用它們,當我使用此代碼:SQL - 我該如何使用可變權利?

DECLARE @Person VARCHAR(255) 
SET @Person = 'Person' 

print '----------------------------------------------------------------------------------------------------' 

if object_id('@Person', 'U') is not null 
begin 
    print ' Tabelle @Person wird entfernt'; 
    drop table @Person; 
end; 
GO 

它顯示了我下面的錯誤:

「@Person」附近的語法不正確。

請幫我用變量寫上正確的上面的sql語句。

+0

您將'@ Person'聲明爲數據類型爲'VARCHAR(255)'的變量,那麼爲什麼要嘗試執行'DROP TABLE @ Person'? – Lamak

+2

變量不能用這種方式。整個陳述必須是動態的,不僅僅是表名。這似乎只是SQL-SERVER。請刪除mySQL標記。 – xQbert

回答

2

你可以試試這個,這只是對於SQL Server:

DECLARE @Person VARCHAR(255) 
SET @Person = 'Person' 

print '----------------------------------------------------------------------------------------------------' 

if object_id(@Person, 'U') is not null 
begin 
    print ' Tabelle ' + @Person + ' wird entfernt' 
    execute('drop table ' + @Person) 
end 
GO 
1

從下面的變量聲明的代碼,它看起來像你想創建一個表變量。你的聲明是一個字符串變量,而不是一個表變量。你應該聲明看起來更像這個(就像創建一個實際的表):

DECLARE @PersonTable TABLE (PersonColumn varchar(255)); 
INSERT @PersonTable (PersonColumn) 
VALUES ('PersonColumnValue'); 

表變量只有在您創建它的會話中存在。它沒有被分配一個object_id,所以你不能檢查它的存在。要麼你創造了它,要麼你沒有創造它。

另外,因爲它只是一個變量而不是實際的表格,所以不能丟棄它。但是你不需要,因爲當它創建的會話結束時,它將不再存在。

如果你想進入臨時表與表變量的比較細緻的地方,可以給自己一個啤酒的例子,谷歌的「SQL表變量與臨時表」,然後在晚上安頓下來。

潛在的可怕的谷歌翻譯版本在德國:

澳元DEM代碼,DER Ihrer Variablendeklaration folgt,scheint ES,ALS OB SIE EINE Tabellenvariable ERSTELLENmöchten。 Ihre Deklaration istfüreine String-Variable,keine Tabellenvariable。 IhreErklärungsollte mehr so aussehen(fast wie einetatsächlicheTabelle erstellen):

DECLARE @PersonTable TABLE(PersonColumn varchar(255)); INSERT @PersonTable(PersonColumn) WERTE('PersonColumnValue');

Die Tabellenvariable existiert nur innerhalb der Sitzung,in der Sie sie erstellt haben。 Es wird keine object_id zugewiesen,所以大家都希望能夠成爲這樣的對象。 Entweder hast du es erschaffen oder nicht。

這是一個可變的和不受限制的表格,可以在表格中選擇。 Aber Siemüssenes nicht,denn es wird wiederaufhörenzu existieren,wenn die Sitzung,in der es erstellt wurde,endet。

德恩SIE在芯片feineren Punkte馮temporärenTabellen奧德Tabellenvariablen gelangenmöchten,holen SIE SICH einen秋季馮比爾,谷歌的 「T SQL Tabelle可變VS溫度Tabelle」,UND SICH獻給巢穴阿本德einzuleben。