【发布时间】:2020-11-06 18:41:50
【问题描述】:
如何在 tsql 中使用参数,或者在合并语句中重新使用这些值,而不必多次传递这些值?我做错了什么?
使用参数运行 TSQL 会引发以下异常
变量名“@p1”已被声明。变量名必须 在查询批处理或存储过程中是唯一的。”
以表def为例:
dbo.Test
(
[key] VarChar(50),
[value] VarChar(50)
)
示例 Java 代码:
try (PreparedStatement s = conn.prepareStatement("DECLARE @p1 VarChar(50) DECLARE @p2 VarChar(50) SET @p1 = ? SET @p2 = ? INSERT dbo.Test ([key], [value]) values(@p1, @p2)"))
{
s.setString(1,"Hello");
s.setString(2,"World");
s.execute();
}
在下面也尝试了相同的结果
DECLARE @p1 VarChar(50) = ?
DECLARE @p2 VarChar(50) = ?
编辑: 上面的代码只是一个示例,我需要/想要使用参数,因此我不必多次设置相同的值以在Merge Statement中使用
dbo.Test 的合并语句如下所示:
DECLARE @key VarChar(50)
DECLARE @val VarChar(50)
MERGE dbo.Test t
USING (SELECT @key [k]) s
ON t.[key] = s.k
WHEN MATCHED THEN
UPDATE
SET t.[value] = @val
WHEN NOT MATCHED THEN
INSERT ([key], [value])
VALUES (@key, @val);
我宁愿不必一次又一次地设置相同的值
【问题讨论】:
-
也许命名参数会有所帮助。 Named Parameters in JDBC Queries.
标签: java sql-server tsql jdbc mssql-jdbc