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 を datetime として宣言しましたが、それに 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 に答える