2017-10-19 70 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。