0

我试图在 T-SQL 的 Openquery 函数中包含一个参数。我过去成功地做到了这一点,但我当前的代码不合作:

declare @bom smalldatetime
declare @eff_date smalldatetime
set @eff_date = (select min(postdate) from #temp_all)
set @bom = convert(varchar(25),dateadd(dd,-(day(@eff_date)-1),@eff_date),101)

select *
into #temp
from openquery(db,
'select l.id
   ,l.date
 from table1 l (nolock)
 inner join table2 m (nolock)
on l.id = m.id and l.date between m.start_date and m.end_date
 inner join table3 d (nolock)
on l.param = d.param
 where l.date = ''''' + convert(varchar(10),@bom,101) + '''''
 and m.param1 = ''Y''
 and m.param2 = ''N''
 and param3 is null
 and d.integer < 30
')

问题在于

 where l.date = ''''' + convert(varchar(10),@bom,101) + '''''

线。有人可以告诉我我做错了什么吗?

4

1 回答 1

0

a) 如果您使用格式 120(或 126)转换日期时间,您将获得更好的、国际安全的 ISO 格式 yyyy-mm-dd 永远不会被误解

b) 您已将 @bom 声明为日期时间,但随后为其分配了一个 varchar。如果您改为将其声明为 varchar,则之后可以使用它来构建 SQL。

c)这种东西有效(http://sqlfiddle.com/#!6/92119/4

declare @eff_date smalldatetime
set @eff_date = dateadd(dd,-(day(getdate())-1),getdate())
declare @bom varchar(30)
set @bom = convert(varchar(20),@eff_date,120)

DECLARE @sqq NVARCHAR(300)
set @sqq =  'select 1, '''+@bom+''',3'
exec sp_executesql @sqq;

...希望您将其应用于您的openquery

于 2013-03-29T22:41:06.177 回答