仅在存储过程中创建一个表

时间:2017-03-20 02:04:56

标签: sql stored-procedures

在执行相同的过程多次时,是否可以只创建一次表,例如:

create procedure grg 
    (@firstname varchar(100),
     @lastname varchar(100), 
     @dob date,
     @loginID varchar(100),
     @password varchar(100),
     @email varchar(100),
     @SSN varchar(11)
    )
as
begin 
     create table............ <- only once

     select 
         @firstname, @lastname, 
         @dob, @loginID, @password, @email,
         @SSN 

     If(.....)

3 个答案:

答案 0 :(得分:1)

您可以使用CREATE TABLE IF NOT EXISTS

请记住,如果表格已经存在,它将显示警告而不是错误。

您可以忽略该警告。如果您想暂时禁用警告,可以按照以下步骤进行操作。

SET sql_notes = 0;
CREATE TABLE IF NOT EXISTS
SET sql_notes = 1; 

答案 1 :(得分:0)

是的,使用sql,你可以使用临时表,只需用哈希作为前缀。

  

这些表只存在于当前会话

如果您确实希望存储过程处理表的创建,那么您可以在存储过程的定义上创建表。只需确保验证表是否已存在,这样您就不会收到错误。

CREATE PROCEDURE XX
 AS
   BEGIN
      IF EXISTS (SELECT * FROM sysobjects WHERE name = <table_name>)
        BEGIN
            <---INSERT CREATE TABLE SCRIPT HERE---->
        END

     <---POPULATE HERE--->


   END

答案 2 :(得分:0)

尝试以下

private static int GetIntegerSize([NotNull]BinaryReader binr)
    {
        if (binr == null)
        {
            throw new ArgumentNullException("binr");
        }

        int count;
        byte bt = binr.ReadByte();
        if (bt != 0x02)     //expect integer
            return 0;
        bt = binr.ReadByte();

        if (bt == 0x81)
            count = binr.ReadByte();    // data size in next byte
        else
            if (bt == 0x82)
            {
                byte highbyte = binr.ReadByte();
                byte lowbyte = binr.ReadByte();
                byte[] modint = { lowbyte, highbyte, 0x00, 0x00 };
                count = BitConverter.ToInt32(modint, 0);
            }
            else
            {
                count = bt;     // we already have the data size
            }



        while (binr.ReadByte() == 0x00)
        {   //remove high order zeros in data
            count -= 1;
        }
        binr.BaseStream.Seek(-1, SeekOrigin.Current);       //last ReadByte wasn't a removed zero, so back up a byte
        return count;
    }
相关问题