我有两个只能使用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
非常感谢您的帮助。
谢谢
答案 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