sql选择tablename作为变量

时间:2015-10-29 13:02:40

标签: sql-server sql-server-2008 tsql dynamic-sql

我有两个只能使用sybase访问的表。我需要编写一个查询,将从7月提取数据到指定的日期参数(例如201507 - 201512)。输入日期参数​​后,我需要使用以下名称访问sybase上的表: ff_vv_201507_tt到ff_vv_201512_tt。

我虽然可能将yyyymm作为变量。我不知道如何实现这一点,因为我对SQL很新。

我试过从sybase访问一个表,但我的代码似乎不起作用:

DECLARE @Table_Name sysname, @DynamicSQL nvarchar(4000)

SET @Table_Name = 'ff_vv_201507_tt'

SET @DynamicSQL =  'select 
*
FROM OPENQUERY(SADATABASE, 'select 
*
                       from  ' @Table_Name ' 
                                         )''

EXECUTE sp_executesql @DynamicSQL

非常感谢您的帮助。

谢谢

2 个答案:

答案 0 :(得分:0)

您可以在带有内联sql的shell脚本中执行此操作。 这样,您将轻松生成并将参数传递给存储过程,并使用给定参数动态创建表 这样一个脚本的例子:

$PARAM="XXXXX"
$PARAM2="YYYYY"
ret=`$ISQL -U$SQL_USER -P$SQL_PASSWD << __XXX
set nocount on
go
use mydatabase
go

DECLARE @batchId INT
select @batchId = 99
exec myStoreProc @batchId, "${PARAM}", "${PARAM2}"
go
__XXX`

答案 1 :(得分:0)

如果你想在你的字符串中使用单引号,你需要通过两个单引号来“逃避”它们。

SET @DynamicSQL =  'select * FROM OPENQUERY(SADATABASE,''select * from '+@Table_Name+''')'

为什么这么复杂,这应该可以正常工作。

SET @DynamicSQL =  'select * FROM ' +@Table_Name 

EXECUTE @DynamicSQL