存储过程无法检测SET?

时间:2014-05-30 01:00:59

标签: sql sql-server stored-procedures

我试图创建一个存储过程,每次执行它时读取不同的.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

1 个答案:

答案 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