我的SQL有什么问题

时间:2012-03-23 17:01:49

标签: sql sql-server-2008

我在下一行收到“'+'错误附近的错误语法:

Select * FROM  + @DATABASE_NAME + '.' + @SCHEMA_NAME + '.' + @TABLE_NAME;

这是我的SQL:

Declare @TABLE_NAME varchar(10)
Declare @SCHEMA_NAME varchar(10)
Declare @DATABASE_NAME varchar(10)

Set @TABLE_NAME = 'Freshmen';
Set @SCHEMA_NAME = 'stu';
Set @DATABASE_NAME = 'Student';

Select * FROM  + @DATABASE_NAME + '.' + @SCHEMA_NAME + '.' + @TABLE_NAME;

我在这里错过了什么吗?

4 个答案:

答案 0 :(得分:1)

您无法在FROM上使用数据库或表格的变量。唯一的方法是使用动态sql(但在查看this link之前)。

Declare @TABLE_NAME varchar(10)
Declare @SCHEMA_NAME varchar(10)
Declare @DATABASE_NAME varchar(10)
Declare @QUERY VARCHAR(4000)

Set @TABLE_NAME = 'Freshmen';
Set @SCHEMA_NAME = 'stu';
Set @DATABASE_NAME = 'Student';
Set @QUERY = 'Select * FROM ' +  QUOTENAME(@DATABASE_NAME) + '.' + QUOTENAME(@SCHEMA_NAME) + '.' + QUOTENAME(@TABLE_NAME)

EXEC(@QUERY)

答案 1 :(得分:1)

您错过了第三个e

上的declare

基本上,你不能运行它,你需要在字符串上加载你的选择并执行字符串:

Declare @TABLE_NAME varchar(10)
Declare @SCHEMA_NAME varchar(10)
Declare @DATABASE_NAME varchar(10)

Set @TABLE_NAME = 'Freshmen';
Set @SCHEMA_NAME = 'stu';
Set @DATABASE_NAME = 'Student';

declare @mySQL varchar(50)
set @mySql= 'Select * FROM ' +  @DATABASE_NAME + '.' + @SCHEMA_NAME + '.' + @TABLE_NAME
exec(@mySql)

答案 2 :(得分:0)

您应该使用sp_executesql函数

执行此操作

答案 3 :(得分:0)

Declare @sql varchar(max)

Declare @TABLE_NAME varchar(10)
Declare @SCHEMA_NAME varchar(10)
Declare @DATABASE_NAME varchar(10)

set @sql = 'select * from [' + @database_name + '].[' + @schema_name + '].[' + @table_name + ']'

exec (@sql)