我试图创建一个存储过程,每次执行它时读取不同的.dbf文件,制作动态存储过程。问题是,我还没有那么好的SQL和我有错误。这是错误:
Procedure or Function 'readDBF' expects parameter '@sql', which was not supplied.
我知道丢失了某些东西和/或制作使存储过程无法理解的东西,但请有人指出他正确的方向吗?
这是代码:
`
USE devSSIS
GO
EXEC master.dbo.sp_MSset_oledb_prop N'VFPOLEDB', N'AllowInProcess', 1
GO
CREATE PROCEDURE readDBF (
@path nvarchar(1000),
@name nvarchar(50),
@sql varchar(max)
)
AS
BEGIN
set @sql = 'select * from openrowset(''VFPOLEDB.1'', ''' + @path +'''; ''; '', ''select * from ''' + @name + ''')'
END
exec @sql
GO
`
我正在使用sql 2005 btw
答案 0 :(得分:1)
我怀疑您要将@sql
定义为存储过程中的局部变量,而不是参数:
CREATE PROCEDURE readDBF (
@path nvarchar(1000),
@name nvarchar(50)
) AS
BEGIN
declare @sql nvarchar(max)
set @sql = 'select * from openrowset(''VFPOLEDB.1'', ''' + @path +'''; ''; '', ''select * from ''' + @name + ''')';
exec(@sql);
END;
如果您正在学习动态SQL,那么您应该学会使用sp_executesql
而不仅仅是exec
。