使用DECLARE for MySQL LOAD DATA语句

使用DECLARE for MySQL LOAD DATA语句,mysql,stored-procedures,Mysql,Stored Procedures,我正在尝试从.Net应用程序运行此查询 LOAD DATA LOCAL INFILE 'testsFile.txt' INTO TABLE Test FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES (idTest, SampleID, Analyst, @Analysed, Device, Comments, @TotalRUL, @RUL

我正在尝试从.Net应用程序运行此查询

LOAD DATA LOCAL INFILE 'testsFile.txt' 
INTO TABLE Test  
FIELDS TERMINATED BY ','  
OPTIONALLY ENCLOSED BY '"'  
LINES TERMINATED BY '\n'  
IGNORE 1 LINES  
(idTest, SampleID, Analyst, @Analysed, Device, Comments, @TotalRUL, @RULOne, @RULTwo, @RULThree, @RULFour, Uploaded) 
SET  
Analysed = nullif(@Analysed,''), 
TotalRUL = nullif(@TotalRUL,''), 
RULOne = nullif(@RULOne,''), 
RULTwo = nullif(@RULTwo,''), 
RULThree = nullif(@RULThree,''), 
RULFour = nullif(@RULFour,'')
当我从MySQL Workbench运行该查询时,一切正常,但当我使用.net应用程序运行该查询时,出现以下异常:

必须定义参数'@analysisd'

我认为我不能在存储过程之外使用declare语句,而且由于使用LOAD DATA语句,我也不能使用存储过程


怎么办?这是将死吗?

你当然不能。如果您的查询使用Workbench,这听起来像是一个.net错误。 我建议您尝试“愚蠢”的解决方案,比如使用反勾号(在@和分析后…抱歉,堆栈溢出自动格式化不允许我向您说明我的意思)或更改变量的名称。

似乎有答案
我需要将“允许用户变量”添加到连接字符串中

感谢您的提示,我认为我的.Net程序将以@开头的变量视为参数。由于我没有使用任何,这导致了错误。我尝试过用倒勾来包围变量,比如
@analysisted
,我不知道我是否能够表达我的意思,而stackoverflow格式也没有帮助。start backtick应该介于@和A之间。这样MySQL就可以理解它是一个会话变量。如果不是,则将其视为局部变量。也许已经很清楚了,但我不确定……我想我知道你在说什么