我想我的第一个动态SQL存储过程。我需要将相同的记录追加到具有相同列名的多个表中。我编译了什么,但是当它运行时,我得到'无效列名'TradeDate。驱动程序sproc首先在下面,然后是包含动态语句的sproc。如果有人可以帮助,那简直太好了..动态SQL插入返回'无效列名'
ALTER PROCEDURE dbo.StoredProcedure2
AS
DECLARE @tableName varchar(120)
SET @tableName = 'tblDailyATR'
EXEC sprocAddDatesAndSymbolsToAggregatedStudy @tableName
RETURN
ALTER PROCEDURE dbo.sprocAddDatesAndSymbolsToAggregatedStudy
@table varchar(120)
AS
DECLARE @tableName varchar(120)
SET @tableName = @table
EXEC(
'INSERT INTO ' + @tableName + '(Symbol, TradeDate)
SELECT Symbol, TradingDate
FROM (SELECT tblSymbolsMain.Symbol, tblTradingDays.TradingDate
FROM tblSymbolsMain CROSS JOIN tblTradingDays
WHERE (tblTradingDays.TradingDate <= dbo.NextAvailableDataDownloadDate())) AS T1
WHERE (NOT EXISTS (SELECT TradeDate, Symbol
FROM' + @tableName +
' WHERE (TradeDate = T1.TradingDate) AND (Symbol = T1.Symbol)))')
RETURN
关于插入,我不知道你的表是什么样子,但它有可能是'TradingDate'而不是'TradeDate'? – peroija 2012-02-16 21:15:31
和动态sql一样,输出到一个变量,粘贴到SSMS中,并在那里调试。 – JNK 2012-02-16 21:16:24
使用'DECLARE @sql NVARCHAR(MAX)= N''''然后将SQL分配给它。当它通过'PRINT'看起来很开心,然后将它传递给'EXEC sp_executesql',而不是'EXEC();' - 这是为什么:http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/17/bad-习惯使用exec执行代替sp执行sql.aspx – 2012-02-16 21:21:52