使用JDBC驱动程序从java声明并使用t-sql变量

使用JDBC驱动程序从java声明并使用t-sql变量,java,sql-server,tsql,jdbc,Java,Sql Server,Tsql,Jdbc,我正在尝试从sql server上的java客户端运行此sql脚本 DECLARE @CON_NAME VARCHAR(100); DECLARE @COMMAND VARCHAR(200); SELECT @CON_NAME=NAME FROM sys.key_constraints WHERE [type] = 'PK' AND [parent_object_id] = Object_id('dbo.MY_TABLE'); SELECT @COMMAND=CONCAT('ALTER TA

我正在尝试从sql server上的java客户端运行此sql脚本

DECLARE @CON_NAME VARCHAR(100);
DECLARE @COMMAND VARCHAR(200);

SELECT @CON_NAME=NAME FROM sys.key_constraints WHERE  [type] = 'PK' AND [parent_object_id] = Object_id('dbo.MY_TABLE');
SELECT @COMMAND=CONCAT('ALTER TABLE MY_TABLE DROP CONSTRAINT ', @CON_NAME);
SELECT @COMMAND;
EXEC (@COMMAND);
java客户端所做的是逐行运行脚本

我得到以下例外情况:

com.microsoft.sqlserver.jdbc.SQLServerException: Must declare the scalar variable "@CON_NAME".

如何解决此问题?

不要逐行运行脚本,而是将整个脚本作为一条语句发送

单独运行每一行意味着要运行多个脚本,就像将每一行放在单独的.sql文件中一样


DECLARE
'd变量是脚本的本地变量,因此单独运行这些行毫无意义。

不要逐行运行脚本,而是将整个脚本作为一条语句发送

单独运行每一行意味着要运行多个脚本,就像将每一行放在单独的.sql文件中一样

DECLARE
'd变量是脚本的本地变量,因此单独运行这些行没有意义

必须声明标量变量“@CON_NAME”

虽然我猜,但我认为您并没有将发布的SQL代码包装在一个过程中,而只是像普通SQL查询一样,从java应用程序代码中逐行运行/调用它们,因此出现了错误。因为当它到达使用变量的行时,变量声明不再存在于该范围中

你应该考虑把这个代码放在一个存储过程中,然后从你的代码后面调用那个过程。 必须声明标量变量“@CON_NAME”

虽然我猜,但我认为您并没有将发布的SQL代码包装在一个过程中,而只是像普通SQL查询一样,从java应用程序代码中逐行运行/调用它们,因此出现了错误。因为当它到达使用变量的行时,变量声明不再存在于该范围中


你应该考虑把这个代码放在一个存储过程中,然后从你的代码后面调用这个过程。

显示你在JavaShow如何调用它。你怎么称呼它在JavaIs?有什么方法使它像一个事务并运行事务中的每个语句?这无济于事。代码>声明'd变量是脚本的本地变量。给JDBC的每个语句都是一个单独的脚本。或者引用“局部变量的作用域是声明它的批处理。”---批处理是给JDBC的SQL字符串。有没有办法使它像一个事务一样,在事务中运行每个语句?没有帮助<代码>声明'd变量是脚本的本地变量。给JDBC的每个语句都是一个单独的脚本。或者引用“局部变量的作用域是声明它的批处理。”---批处理是给JDBC的SQL字符串。