如何实现以下
之类的功能SqlConnection connection = new SqlConnection("CNStr");
SqlCommand Command = connection.CreateCommand();
command.CommandText = "DECLARE @find varchar(30) = 'Test'; ";
command.ExecuteNonQuery();
command.CommandText = "select * from Some_View_Which_Has_Used_That_Variable_In_ItsWhere_Condition"
var result = command.ExecuteNonQuery();
command.Dispose();
connection.Dispose();
我想在每个连接变量中声明一些,然后在视图,函数等各处使用它们。
如何在不使用临时表和contextId的情况下实现此目标?
提前致谢
答案 0 :(得分:1)
您不能在sql语句中使用DECLARE
。
它甚至不是Data Manipulation Language statement。它甚至根本不影响你的Some_View_Which_Has_Used_That_Variable_In_ItsWhere_Condition
。
这就是为什么它对我来说毫无意义。如果您确实要声明@find
,可以在视图中写为手册。
并使用using
statement处理您的SqlConnection
和SqlCommand
。
例如;
using(SqlConnection con = new SqlConnection(CNStr))
using(SqlCommand command = con.CreateCommand())
{
//
}
答案 1 :(得分:1)
唯一明显的每个连接对象持续时间超过一个批处理(即您的ExecuteXXX
调用)将是临时表:
command.CommandText = "CREATE TABLE #Settings (find varchar(30) not null);
INSERT INTO #Settings (find) VALUES ('Test')";
command.ExecuteNonQuery();
command.CommandText = "select * from Some_View where
SomeColumn in (select find from #Settings)"
var result = command.ExecuteReader();
所有变量(无论是标量值还是表值)的生命周期都在各自批次的末尾结束。
可以在连接/会话级别设置一些其他内容(例如CONTEXT_INFO
),但它们往往具有固定的,有限的数据类型。