我们不能将表作为存储过程中的参数传递..?

时间:2010-06-20 14:05:29

标签: sql-server

SET QUOTED_IDENTIFIER OFF
go
CREATE PROCEDURE ps_StudentList_Import
@PathFileName varchar(100),
@tablename varchar(100)

AS

DECLARE @SQL varchar(2000)

 BEGIN

  SET @SQL = "BULK INSERT '"+@tablename+"' FROM '"+@PathFileName+"' WITH (FIELDTERMINATOR = '"",""',ROWTERMINATOR = '""\n""') "
 END
 exec(@SQL);
 go


 EXEC ps_StudentList_Import 'c:\data\DimActivity.txt' ,'dbo.DimActivity';

这里'dbo.DimActivity'是一个表作为参数我们不能将表作为参数传递?  我的上述代码出了什么问题..请任何人帮助我...

3 个答案:

答案 0 :(得分:1)

beginend放置在正确的位置可能有所帮助:

AS
    BEGIN
    DECLARE @SQL varchar(2000)
    SET @SQL = "BULK INSERT '"+@tablename+"' FROM '"+@PathFileName+
        "' WITH (FIELDTERMINATOR = '"",""',ROWTERMINATOR = '""\n""') "
    exec(@SQL);
    END
go

答案 1 :(得分:1)

我不确定报价的使用情况。这有用吗?

CREATE PROCEDURE ps_StudentList_Import
@PathFileName varchar(100),
@tablename sysname

AS
BEGIN
DECLARE @SQL varchar(2000)

 SET @SQL = 'BULK INSERT '+@tablename+' FROM '''+@PathFileName+''' WITH (FIELDTERMINATOR = '','',ROWTERMINATOR = ''\n'') '

print @SQL
exec(@SQL);
 END

答案 2 :(得分:0)

您可以尝试删除“dbo”。从表名。 dbo只是一个命名空间,实际名称是“DimActivity”。在顶部添加一个'use'语句,以指定表所在的数据库。