存储过程——必须声明标量变量

JunT. 2013-09-23 09:59:10
用存储过程导数据,直接使用下面语句就可以执行

Bulk Insert TempTable FROM 'e:\123.csv'  WITH(FIELDTERMINATOR = ',', ROWTERMINATOR = '\n')


我把路径改成参数@FilePath ,就会提示“必须声明标量变量@FilePath” 应该怎么改?

SET @ImpSQLstr= 'Bulk Insert #TempTable1 FROM '+ @FilePath +'; WITH (FIELDTERMINATOR ='','',ROWTERMINATOR = ''\n'')'
Exec (@ImpSQLstr)


本来还提示With 前必须加分号,我加了不知道对不对
...全文
225 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
JunT. 2013-09-23
  • 打赏
  • 举报
回复
引用 9 楼 DBA_Huangzj 的回复:
完事结贴
我是每贴必结的
發糞塗牆 2013-09-23
  • 打赏
  • 举报
回复
完事结贴
JunT. 2013-09-23
  • 打赏
  • 举报
回复
引用 7 楼 DBA_Huangzj 的回复:
其实你把exec改成print,再执行你的第二条语句,就知道实际执行的语句,然后就看到你的问题所在了。
√√√ Get
發糞塗牆 2013-09-23
  • 打赏
  • 举报
回复
其实你把exec改成print,再执行你的第二条语句,就知道实际执行的语句,然后就看到你的问题所在了。
發糞塗牆 2013-09-23
  • 打赏
  • 举报
回复
改成这样
ALTER PROC [dbo].ImportFile

@FilePath NVARCHAR(200) 

AS

BEGIN

DECLARE @ImpSQLstr NVARCHAR(600)

--Bulk Insert TempTable FROM 'e:\IF8600M1.csv'  WITH(FIELDTERMINATOR = ',', ROWTERMINATOR = '\n')

SET @ImpSQLstr= 'Bulk Insert TempTable FROM '+''''+ @FilePath+'''' +' WITH (FIELDTERMINATOR ='','',ROWTERMINATOR =''\n'')'

EXEC (@ImpSQLstr)  
END
JunT. 2013-09-23
  • 打赏
  • 举报
回复
引用 4 楼 DBA_Huangzj 的回复:
SET @ImpSQLstr= 'Bulk Insert #TempTable1 FROM '+ @FilePath +'; WITH (FIELDTERMINATOR ='','',ROWTERMINATOR = ''\n'')' Exec (@ImpSQLstr)  你这句话没有定义@filepath哦
不好意思闹笑话了,我上面吧 @filepath给注释掉了,没看到。。。 不过有个新问题,先把所有代码贴上 存储过程: CREATE PROC ImportFile @FilePath NVARCHAR(200) AS BEGIN DECLARE @ImpSQLstr NVARCHAR(600) --Bulk Insert TempTable FROM 'e:\IF8600M1.csv' WITH(FIELDTERMINATOR = ',', ROWTERMINATOR = '\n') SET @ImpSQLstr= 'Bulk Insert TempTable FROM '+ @FilePath +'; WITH (FIELDTERMINATOR ='','',ROWTERMINATOR =''\n'')' Exec (@ImpSQLstr) END[/code] 执行:
USE [data]
GO

DECLARE	@return_value int

EXEC	@return_value = [dbo].[ImportFile]
		@FilePath = N'E:\IF8600M1.csv'

SELECT	'Return Value' = @return_value

GO
报错: 消息 102,级别 15,状态 1,第 1 行 'E:' 附近有语法错误。 (1 行受影响)
發糞塗牆 2013-09-23
  • 打赏
  • 举报
回复
SET @ImpSQLstr= 'Bulk Insert #TempTable1 FROM '+ @FilePath +'; WITH (FIELDTERMINATOR ='','',ROWTERMINATOR = ''\n'')' Exec (@ImpSQLstr)  你这句话没有定义@filepath哦
JunT. 2013-09-23
  • 打赏
  • 举报
回复
引用 1 楼 DBA_Huangzj 的回复:
BULK INSERT的格式应该是这样的吧: BULK INSERT AdventureWorks2012.Sales.SalesOrderDetail FROM '\\computer2\salesforce\dailyorders\neworders.txt';
我的这个也没问题啊,上面那句直接就可以导入成功
ai_li7758521 2013-09-23
  • 打赏
  • 举报
回复
CREATE PROC ImportData 
@FilePath NVARCHAR(200)
AS
BEGIN
	DECLARE @ImpSQLstr NVARCHAR(1000)
	SET @ImpSQLstr= 'Bulk Insert #TempTable1 FROM '''+ @FilePath +'''; WITH (FIELDTERMINATOR ='','',ROWTERMINATOR =''\n'')'
	EXEC (@ImpSQLstr)  
END
發糞塗牆 2013-09-23
  • 打赏
  • 举报
回复
BULK INSERT的格式应该是这样的吧: BULK INSERT AdventureWorks2012.Sales.SalesOrderDetail FROM '\\computer2\salesforce\dailyorders\neworders.txt';

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧