0

我尝试了很多组合,但总是有错误。(用硬代码替换我的变量的选择/插入在程序之外工作)

基本上我的过程必须做一个动态选择,接收一个日期变量作为字符串并返回一个表作为结果,并应该将它插入到其他现有表中。删除部分动态查询的代码(太大):

alter procedure [dbo].[SavePosition]
(@Refdate as varchar(15) =null)
as
begin
set NOCOUNT on
declare @YdDate as varchar(15)
declare @SQL AS NVARCHAR(max)

--To get prior date from @refdate(standalone select working well):
set @YdDate = (SELECT distinct max(TradeDate) from Trades where TradeDate < @Refdate)

--Sample of the query:
set @SQL='Select  ('''+ @Refdate +''') AS Refdate, @('''+ @YdDate +''') as Product from...join..having...group...';

INSERT INTO [dbo].[Position]([Refdate],[Product],...)
EXEC sp_executesql @sql
end
go

当我在下面运行时,我收到很多:“无法绑定多部分标识符“....”。

exec [dbo].[SavePosition] '2014-12-10'
4

1 回答 1

0

您需要将完整的插入语句存储在 @SQL 变量中。请像这样尝试。

设置@SQL='INSERT INTO [dbo].Position Select ('''+ @Refdate +''') AS Refdate, @('''+ @YdDate +''') 作为 Product from...join..有...组...';

执行 sp_executesql @sql

于 2015-01-07T13:45:11.343 回答