0

我正在通过 Web 服务编写聊天,运行 SQL Express 服务器。我在 Visual Studio 2010 上使用 C#。

我有一个应该创建一个临时表的存储过程。当我在 Management Studio 中执行该过程时,它会创建一个临时表。但是当我在 LINQ to SQL 上执行该过程时,它会进入该过程使一切正确,但不会创建 TempTable。

这里的 SQL 代码:

    BEGIN
      SET NOCOUNT ON;
      DECLARE @SQL NVARCHAR(MAX)
      DECLARE @ResultCode INT --1 -> good; 0 -> Fail

      SELECT @ResultCode = 1

      SET @SQL = 'CREATE Table ##' + @i_Tablename + '(
                      ID INT IDENTITY(1,1) PRIMARY KEY,
          Username VARCHAR(25) NOT NULL,
          Message VARCHAR(MAX) NOT NULL,
          Font VARCHAR(100) NOT NULL,
          ForeColor INT NOT NULL,
          BGColor INT NOT NULL,
          Date DATETIME DEFAULT GETDATE())'
      EXECUTE sp_sqlexec @SQL

      INSERT INTO Chatlist VALUES(@i_Tablename)

      IF @@error <> 0
      BEGIN
        SELECT @ResultCode = 0
      END
      RETURN @ResultCode
    END

这就是我在 C# 中调用过程的方式:

DB.sp_CreateTempTable(Chatname);

程序正在执行,结果代码正常,它在表格聊天列表中插入,但没有 TempTable....

4

1 回答 1

1

全局临时表有两个数字符号 (##) 作为其名称的第一个字符;它们在创建后对任何用户都是可见的,当所有引用该表的用户与 SQL Server 实例断开连接时,它们将被删除。

我想 SQL Server 正在删除您的表。如果你想从其他地方引用它,你不应该让它成为临时的。

于 2013-10-23T09:58:37.847 回答