在执行相同的过程多次时,是否可以只创建一次表,例如:
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(.....)
答案 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;
}