我試圖創建一個存儲過程,將接受數據表和表名作爲參數,並創建一個表來創建表。這是該過程:將顯示存儲過程使用的數據表,表名作爲參數
ALTER PROCEDURE [dbo].[SPROC_IMPORT_UPLOADED_EXCEL_DATA]
@DataTbl emTable READONLY ,
@TableName [varchar](50)
AS
BEGIN
DECLARE @SQL nvarchar(MAX)
-------------------------------------------------------------------------------
--Check 1: Checking if the table is already present
-------------------------------------------------------------------------------
IF OBJECT_ID (@TableName,'U') IS NOT NULL
SET @SQL = N'INSERT INTO ' + @TableName + ' SELECT * FROM ' + @DataTbl
ELSE
SET @SQL = N'SELECT * INTO ' + @TableName + ' FROM ' + @DataTbl
EXEC sp_executesql @SQL
END
以下錯誤:
Msg 137, Level 16, State 1, Procedure SPROC_IMPORT_UPLOADED_EXCEL_DATA, Line 8 [Batch Start Line 7]
Must declare the scalar variable "@DataTbl".
研究錯誤後,試圖通過將參數以使用sp_executesql來修改過程。
EXEC sp_executesql @SQL,
N'@DataTbl emTable READONLY' ,
'@TableName [varchar](50)',
@DataTbl,
@TableName;
但是,顯示相同的錯誤。有什麼建議麼?
爲什麼使用'EXEC sp_executesql @ SQL'而不是'EXEC(@SQL)'? – LONG
@LONG我寧願使用sp_executesql,因爲它允許參數。當然在這種情況下你不能使用參數。 :) –
檢查我的答案@ H.Bandi,我修改了基於您的SP – LONG