是否可以在使用本地变量的Transact-SQL查询中使用SqlParameter ?



假设我有一个transact-SQL查询,执行如下操作:

INSERT INTO Table1 -- Table1 has an identity column for the primary key
(
Table1Value1,
Table1Value2
)
VALUES
(
@Table1Value1, -- SqlParameter
@Table1Value2 -- SqlParameter
)   
DECLARE @table1ID int = SCOPE_IDENTITY();
INSERT INTO Table2 -- Table2 also has and identity column for the PK
(
Table1ID -- Must have foreign key to Table1 record
Table2Value1,
Table2Value2
)
VALUES
(
@table1ID,
@Table2Value1, -- SqlParameter
@Table2Value2  -- SqlParameter
)
DECLARE @table2ID int = SCOPE_IDENTITY();
INSERT INTO Table3
(
Table1ID, -- Foreign Key to Table1 record
Table2ID, -- Foreign Key to Table2 record
Table3Value1,
Table3Value2
)
VALUES
(
@table1ID, -- Foreign Key to Table1 record
@table2ID, -- Foreign Key to Table2 record
@Table3Value1, -- SqlParameter
@Table3Value2 -- SqlParameter
)

有办法让这个工作吗?您是否可以转义本地的transact-sql变量名,以便计算参数位置的东西忽略它们?你能告诉SqlClient使用@以外的东西来标识参数吗?有没有一种方法可以在不使用存储过程或运行子查询的情况下完成这项工作?

谢谢。

你可以有这样的客户端代码(以c#为例):

var cmd = new SqlCommand("exec Procedure @Var1, @Var2", connection);
cmd.Parameters.Add("@Var1", SqlDbType.NVarChar, 40).Value = var1Value;
cmd.Parameters.Add("@Var2", SqlDbType.NVarChar, 40).Value = var2Value;  
connection.Open();
cmd.ExecuteNonQuery();

包含如下代码的过程:

-- declare an additional variable in the procedure
DECLARE @VAR3 NVarChar(40) = 'test Value';
SELECT @Var1, @Var2, @Var3;
如果你想在SQL代码或过程中声明一个变量,只在过程或脚本中使用,那么就不要在客户端为它提供一个参数,因为那将是两次声明同一个变量。

肯定是打错了。我改回来了,现在能用了。这里唯一的教训是不要在48小时内工作40小时,并且可以将参数与transact-sql本地变量混合使用。: -)

我不反对删除这个

相关内容

  • 没有找到相关文章

最新更新