我对临时表有一个非常奇怪的问题。我在代码中创建一个临时表,它显示在MSSQL中的tempdb.sys.tables下,但如果我尝试从中选择,我会得到一个
无效的对象名称'#Update'。错误
如果我将创建临时表sql直接从我的代码中剪切并粘贴到mssql manager中并运行它,它将创建临时表,我可以从中进行选择。然后它将在tempdb.sys.tables中显示两个ideintical临时表。
也许我忽略了什么,但这看起来很奇怪。
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
//Execute the command to make a temp table
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = "create table #UpdatePOS (Store_ID nvarchar(50), POSItem_Id nvarchar(50), POSSalesDate datetime, LastModifiedWhen datetime, UpdateResult bit, QTY decimal(18,0));";
cmd.ExecuteNonQuery();
}
}
谢谢!
答案 0 :(得分:6)
本地临时表(以单个#符号为前缀)在创建它的连接断开后消失。如果您使用一个SqlConnection
对象创建该表并尝试通过另一个对象访问它,您可能希望使用全局临时表(前缀为##),但因为断开连接后它将保持存在在运行SQL之前截断任何数据。
更多阅读:http://technet.microsoft.com/en-us/library/ms186986%28v=sql.105%29.aspx
答案 1 :(得分:2)
永远不会有两个相同的表,你可能没有注意到的名称会有一些变化。在SqlConnection
中使用#(本地临时表)创建的临时表在MSSQL管理器中无法访问,因为它被视为另一个会话,并且本地临时表只能在同一会话中访问。您将能够使用##,因为它们是全局临时表