我想我的第一個動態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