Tabelas no SQL Server
- Amanda Nascimento
- 3 de ago. de 2023
- 15 min de leitura
Atualizado: 7 de ago.
Antes de tudo, é necessário criar um banco de dados dentro de um servidor. Se você ainda não sabe como fazer isso, clique aqui para aprender mais sobre criação de bancos de dados.
Uma tabela é uma estrutura que armazena dados em linhas e colunas.
Cada coluna (atributo) representa um campo com um tipo de dado específico (como texto, número ou data).
Cada linha representa um registro único.
As tabelas são os principais elementos de um banco de dados relacional, permitindo a organização estruturada e eficiente das informações.
Para saber mais sobre chaves clique aqui
Para consultar sobre chave primária em tabelas existentes, clique aqui
Ao criar uma tabela, você deve definir:
Nome da tabela: identificador único dentro do banco de dados.
Colunas: cada uma com nome, tipo de dado e, opcionalmente, restrições (como NOT NULL, UNIQUE, etc.).
Chave primária: uma ou mais colunas que identificam de forma única cada registro na tabela.
Entidade e Atributo
Durante a modelagem de dados, é fundamental entender dois conceitos-chave: entidade e atributo.
Entidade: representa um objeto do mundo real sobre o qual desejamos armazenar informações. Cada entidade costuma se tornar uma tabela no banco de dados.
Exemplos de entidades:
Cliente
Produto
Pedido
Funcionário
Atributo: representa uma característica da entidade. Em bancos de dados, os atributos são representados pelas colunas da tabela.
Exemplo:
Para a entidade Cliente, os atributos podem ser:
Nome
CPF
Data de Nascimento
E-mail
Ou seja, ao criar uma tabela chamada Clientes, cada coluna representa um atributo dessa entidade.
--Entidade clientes
CREATE TABLE Clientes (
ClienteID INT PRIMARY KEY, -- atributo identificador
Nome NVARCHAR(100), -- atributo
CPF CHAR(11), -- atributo
Email NVARCHAR(100), -- atributo
DataNascimento DATE -- atributo
);
Entidades podem se relacionar entre si. Por exemplo, um cliente pode fazer vários pedidos. Isso nos leva ao conceito de relacionamento entre entidades, que é modelado usando chaves estrangeiras (foreign keys) que vimos acima.
CREATE TABLE Pedidos (
PedidoID INT PRIMARY KEY,
ClienteID INT FOREIGN KEY REFERENCES Clientes(ClienteID),
DataPedido DATETIME,
Total DECIMAL(10, 2)
);
Neste exemplo, a coluna ClienteID da tabela Pedidos é uma chave estrangeira que referencia a coluna ClienteID da tabela Clientes.
Para saber mais sobre modelagem de dados, clique aqui!
Criando uma tabela simples, passo a passo
No script abaixo, substituia dbo. caso tenha criado um banco de dados ou um schema. Exemplo: [nomebanco].[nomeschema].[nometabela]
CREATE TABLE dbo.TESTE (

ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
NOME VARCHAR(100),
IDADE INT,
NASCIMENTO DATE
);

Criando uma tabela simples com IF
Inserindo uma condicional com o IF para que se a tabela já existir, é para excluir primeiro para depois criá-la novamente:
IF(OBJECT_ID('dbo.TESTE') IS NOT NULL)DROP TABLE dbo.TESTE

Inserindo uma tabela com dados como nome, idade e data de nascimento:
Para todos os campos que não podem ser vazio, podemos colocar o NOT NULL
Exemplo: NOME VARCHAR(100) NOT NULL,

IF(OBJECT_ID('dbo.TESTE2') IS NOT NULL)
DROP TABLE dbo.TESTE2;
CREATE TABLE dbo.TESTE2 (
ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
NOME VARCHAR(100),
IDADE INT,
NASCIMENTO DATE
);
INSERT INTO dbo.TESTE2 (NOME, IDADE, NASCIMENTO)
VALUES ('Amanda', 32, '2023-01-01'), ('Matheus', 10, '2023-01-01'),
('Joao', 19, '2023-01-01'), ('Guilherme', 33, '2023-01-01'), ('Dara', 26, '2023-01-01');
Criando uma tabela com chave primária (Primary Key)
A chave primária é o principal identificador exclusivo de uma tabela. Cada valor deve ser único e não nulo.
CREATE TABLE Clientes (
ClienteID INT PRIMARY KEY,
Nome NVARCHAR(100) NOT NULL,
Email NVARCHAR(100) UNIQUE,
DataCadastro DATETIME DEFAULT GETDATE()
);
Descrição das regras de criação das colunas:
ClienteID: Identificador único do cliente, definido como chave primária.
Nome: Nome do cliente, não permite valores nulos.
Email: Endereço de e-mail do cliente, deve ser único.
DataCadastro: Data e hora do cadastro, com valor padrão igual à data atual
Criando uma tabela com chave composta
É uma chave formada por mais de uma coluna, geralmente quando nenhuma coluna isoladamente pode garantir unicidade.
CREATE TABLE Matriculas (
AlunoID INT,
CursoID INT,
DataMatricula DATE,
PRIMARY KEY (AlunoID, CursoID)
);
Criando uma tabela com chave Estrangeira (Foreign Key)
Uma chave estrangeira (FOREIGN KEY) é usada para criar um relacionamento entre duas tabelas.
Ela garante a integridade referencial, ou seja, evita que uma tabela referencie registros inexistentes em outra.
A tabela que contém a chave primária é chamada de tabela pai.
A tabela que contém a chave estrangeira é chamada de tabela filha.
Em resumo, é um relaciona tabelas, criando uma dependência entre dados.
INSERT INTO dCREATE TABLE dbo.Estados (
EstadoID INT PRIMARY KEY,
Nome VARCHAR(50)
);
CREATE TABLE dbo.Cidades (
CidadeID INT PRIMARY KEY,
Nome VARCHAR(50),
EstadoID INT,
FOREIGN KEY (EstadoID) REFERENCES dbo.Estados(EstadoID)
);
-----------------------------------
-- Inserindo o estado primeiro
INSERT INTO dbo.Estados (EstadoID, Nome) VALUES (1, 'SP');
-- Depois a cidade, associando ao estado
INSERT INTO dbo.Cidades (CidadeID, Nome, EstadoID) VALUES (101, 'São Paulo', 1);
---Se você tentar inserir uma cidade com EstadoID = 99 (que não existe), o SQL Server impedirá.
Criando uma tabela com Super Chave (Super Key)
Qualquer conjunto de colunas que identifica de forma única um registro. Pode conter atributos a mais que a chave primária.
CREATE TABLE Clientes (
ClienteID INT PRIMARY KEY,
CPF CHAR(11),
Nome NVARCHAR(100),
UNIQUE (Nome, CPF) -- Super Chave possível
);
Criando uma tabela com Chave candidata (Candidate Key)
São colunas ou conjuntos de colunas que podem servir como chave primária.
CREATE TABLE Usuarios (
UsuarioID INT PRIMARY KEY, -- Chave primária escolhida
Email NVARCHAR(100) UNIQUE, -- Chave candidata
CPF CHAR(11) UNIQUE -- Outra chave candidata
);
Criando uma tabela com Chave Única (Unique Key)
Garante que os valores sejam únicos, mas permite valores nulos (diferente da chave primária).
CREATE TABLE Funcionarios (
FuncionarioID INT PRIMARY KEY,
Email NVARCHAR(100) UNIQUE, -- Pode ser nulo, mas se houver valor, deve ser único
Telefone VARCHAR(15) UNIQUE
);
Criando uma tabela com Chave Alternativa (Alternate Key)
É qualquer chave candidata que não foi escolhida como a chave primária.
CREATE TABLE Cidadãos (
ID INT PRIMARY KEY, -- Chave primária escolhida
CPF CHAR(11) UNIQUE -- Chave alternativa
);
Criando uma tabela com Chave Natural (Natural Key)
Chave que já existe nos dados do mundo real. Ex: CPF, CNPJ, matrícula, etc.
CREATE TABLE ClientesNaturais (
CPF CHAR(11) PRIMARY KEY, -- Chave natural
Nome NVARCHAR(100)
);
Criando uma tabela com Chave de Substituição (Surrogate Key)
É uma chave artificial criada quando a natural não é confiável ou não existe. Normalmente é um número incremental (ID).
CREATE TABLE ClientesSubstituidos (
ClienteID INT IDENTITY(1,1) PRIMARY KEY, -- Surrogate Key
CPF CHAR(11),
Nome NVARCHAR(100)
);
Criando uma tabela com Chave Secundária
Não identifica registros de forma única, mas é usada para recuperação de dados, via índices. É comum em índices não clusterizados.
CREATE TABLE ProdutosIndexados (
ProdutoID INT PRIMARY KEY,
Categoria NVARCHAR(50),
Nome NVARCHAR(100)
);
-- Índice secundário na coluna Categoria
CREATE NONCLUSTERED INDEX idx_Categoria
ON ProdutosIndexados (Categoria);
Criando uma tabela com restrição
Para garantir que os valores inseridos em uma coluna atendam a uma condição específica:
CREATE TABLE Funcionarios (
FuncionarioID INT PRIMARY KEY,
Nome NVARCHAR(100),
Salario DECIMAL(10,2) CHECK (Salario >= 0)
);
Alterar tipo de dados em uma tabela
alter table funcionarios
alter column telefone varchar(10)
Adicionando coluna em uma tabela
💠 Exemplo 1
ALTER TABLE Clientes ADD Telefone NVARCHAR(20);
💠 Exemplo 2
ALTER TABLE TCARGOS
ADD datacriacao DATE NULL;
💠 Exemplo 3
alter table funcionarios
add telefone varchar(20)
Criar uma coluna com valor default
ALTER TABLE NomeDaTabela
ADD NovaColuna VARCHAR(50) DEFAULT 'Valor Padrão';
Adicionando ou alterando dados em uma coluna
Atualizar um valor específico em uma linha.
Atualiza a cidade do cliente com id_cliente = 101
UPDATE clientes
SET cidade = 'Belo Horizonte'
WHERE id_cliente = 101;
Atualizar múltiplas colunas
Atualiza o preço e o estoque do produto de ID 5
UPDATE produtos
SET preco = 29.90,
estoque = 100
WHERE id_produto = 5;
Atualizar todos os registros da tabela
Define o valor da coluna ativo como 0 para todos os funcionários.
UPDATE funcionarios
SET ativo = 0;
Atualizar com base em outra tabela (usando JOIN)
Aplica um aumento de 10% no salário de funcionários do TI.
UPDATE f
SET f.salario = f.salario * 1.10
FROM funcionarios f
WHERE d.nome = 'TI';
Atualizar com base em uma subquery
Aumenta o preço dos produtos da categoria "Eletrônicos" em 15%.
UPDATE produtos
SET preco = preco * 1.15
WHERE id_categoria = (
SELECT id_categoria FROM categorias WHERE nome = 'Eletrônicos'
);
Usar CASE dentro de um UPDATE
Atualiza o status dos pedidos com base na data de entrega.
UPDATE pedidos
SET status = CASE
WHEN data_entrega < GETDATE() THEN 'Entregue'
WHEN data_entrega IS NULL THEN 'Pendente'
ELSE 'Em trânsito'
END;
🔹Exemplo 1
UPDATE FUNCO
SET NOME_CARGO = UPPER(REPLACE(REPLACE(REPLACE(RTRIM(NOME_CARGO), 'ç', 'c'), 'á', 'a'), 'é', 'e'));
🔹Exemplo 2
UPDATE TCARGOS
SET datacriacao = '2023-07-13'
WHERE cargos = 5;
🔹Exemplo 3
UPDATE psecao
SET rua = 'AV REI PELE'
WHERE codigo LIKE '0.039%'
AND SECAODESATIVADA = '0'
🔹Exemplo 4
update funcionarios set telefone= '11999999999' where funcionarioid=1
update funcionarios set telefone= '11988888888' where funcionarioid=2
Alterar nome de uma coluna
EXEC sp_rename 'TCARGOS.codigo_cargo', 'CARGOS', 'COLUMN';
Excluindo uma tabela
💠 Exemplo 1
DROP TABLE Clientes

💠 Exemplo 2
DROP TABLE CORPORE_DESENV.dbo.TCARGOS;
Apagando uma coluna de uma tabela
ALTER TABLE NomeDaTabela
DROP COLUMN NomeDaColuna;
Apagando dados de uma coluna
UPDATE NomeDaTabela
SET NomeDaColuna = NULL;
Mascarar (codificar) os dados de uma coluna específica
Exemplo: mascarar parcialmente uma coluna de e-mails.
UPDATE NomeDaTabela
SET Email = CONCAT(LEFT(Email, 2), '*****@***.com');
Outro exemplo para criptografar dados (não reversível, usando HASHBYTES):
-- Primeiro, converta para VARBINARY, depois salve como VARCHAR
UPDATE NomeDaTabela
SET ColunaCodificada = CONVERT(VARCHAR(100), HASHBYTES('SHA2_256', ColunaOriginal), 2);
🔹 HASHBYTES gera um hash da informação. Ideal para senhas, não pode ser revertido.
🔹 Use SHA2_256 ou SHA1 para algoritmos seguros.
Criando uma tabela com indexador numérico

IF OBJECT_ID('dbo.Numbers') IS NOT NULL DROP TABLE dbo.Numbers;
CREATE TABLE dbo.Numbers (Number INT PRIMARY KEY);
WITH Tally (N) AS (
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) - 1
FROM sys.objects s1 CROSS JOIN sys.objects s2
)
INSERT INTO dbo.Numbers (Number)
SELECT N
FROM Tally
WHERE N <= 10000; -- Ajuste conforme necessário
select * from Numbers
Resultado:

Alterando nome de uma tabela
De FUNCO para TCARGOS
EXEC sp_rename 'FUNCO', 'TCARGOS';
SELECT * FROM TCARGOS
Consultar nomes das tabelas existentes e detalhes
💠 Exemplo 1
USE NOMEDOSEUBANCO
SELECT name,
FORMAT(create_date, 'dd/MM/yyyy') as create_date,
FORMAT(modify_date, 'dd/MM/yyyy') as modify_date,
modify_date
FROM sys.tables
ORDER BY name

💠 Exemplo 2 (mais completo)
Lista o nome database, schema, data de criação e última data de modificação
USE ods;
SELECT
DB_NAME() AS database_name, -- Nome do banco atual
FORMAT(t.create_date, 'dd/MM/yyyy') AS create_date,
FORMAT(t.modify_date, 'dd/MM/yyyy') AS modify_date,
t.modify_date
FROM sys.tables t
INNER JOIN sys.schemas s ON t.schema_id = s.schema_id -- Join com schema
Obter quantidade de linhas de uma tabela
SELECT COUNT(*) FROM basetri

Criar tabela temporária
São tabelas criadas temporariamente, visíveis somente durante a sessão atual (ou transação, dependendo do escopo), e são armazenadas fisicamente no banco tempdb.
CREATE TABLE #ClientesTemporarios (
Nome VARCHAR(100),
Cidade VARCHAR(50)
);
INSERT INTO #ClientesTemporarios
SELECT Nome, Cidade
FROM Clientes
WHERE Estado = 'SP';
SELECT * FROM #ClientesTemporarios;
Tipo | Prefixo | Escopo | Visível para outras sessões? | Exemplo |
Tabela temporária local | # | Sessão atual (conexão) | ❌ Não | CREATE TABLE #Temp |
Tabela temporária global | ## | Todas as sessões (até encerrar a última que usa) | ✅ Sim | CREATE TABLE ##TempGlobal |
Insert INTO - Inserindo dados a partir de uma outra tabela
Primeiro definimos o esqueleto com CREATE TABLE, e depois preenchemos com dados usando INSERT INTO.
🟠Insert INTO com select Copiando dados da tabela de origem para uma nova tabela que já existe a estrutura:
INSERT INTO dbo.NovaTabela (Col1, Col2, Col3)
SELECT ColA, ColB, ColC
FROM dbo.TabelaOrigem
WHERE Condicao = 'Valor';
🟠Insert INTO com values
Inserindo dados "avulsos" em uma tabela existente.
INSERT INTO dbo.TESTE2 (NOME, IDADE, NASCIMENTO)
VALUES ('Pedro', 28, '2025‑08‑07');
Se você omitir os nomes das colunas, o SQL Server vai assumir que os valores estão na mesma ordem das colunas da tabela.
⚠️ Requisitos para usar sem colunas:
Você deve passar um valor para todas as colunas obrigatórias (NOT NULL sem valor padrão).
A ordem dos valores precisa seguir exatamente a ordem das colunas na tabela.
Se a tabela tiver colunas IDENTITY, elas não devem ser incluídas (a menos que você habilite IDENTITY_INSERT, o que não é comum).
----exemplo do tipo de dados da tabela
CREATE TABLE [NomeBanco].[NomeSchema].[NomeTabela] (
NOME NVARCHAR(100),
IDADE INT,
NASCIMENTO DATE
);
----exemplo do insert into sem especificar o nome das colunas
INSERT INTO [NomeBanco].[NomeSchema].[NomeTabela]
VALUES ('Carlos', 45, '1980-12-03');
Outro exemplo:
----exemplo do tipo de dados da tabela que tem um campo IDENTITY
CREATE TABLE [NomeBanco].[NomeSchema].[NomeTabela] (
id INT IDENTITY(1,1) PRIMARY KEY,
cod_boleto VARCHAR(100), -- Código de solicitação da API
origem VARCHAR(50), -- origem se o boleto é taxa mensal ou boleto extra de cobrança em atraso
valor DECIMAL(10,2), -- Valor da cobrança
vencimento DATE, -- Data de vencimento do boleto
cpf VARCHAR(14), -- CPF do pagador (formato com ou sem pontos e traço)
apto VARCHAR(5), -- Complemento (número do apartamento)
data_emissao DATETIME DEFAULT GETDATE() -- Data e hora da emissão do boleto
);
----exemplo do insert into sem especificar o nome das colunas
INSERT INTO [gilvieira].[STAGE].[histBoleto]
VALUES (
'382a40c3-ff43', -- cod_boleto
'Boleto extra ref 052025', -- origem
513.20, -- valor
'2025-08-11', -- vencimento (DATA, com aspas)
'00078538701', -- cpf
'54b', -- apto
'2025-08-06 18:57:18.297' -- data_emissao (DATETIME, com aspas)
);
Observações:
Como a tabela tem um campo IDENTITY, você não precisa (nem deve) passar valor para ele.
Caso você quisesse forçar a inserção de um valor específico no id (não é o caso aqui), teria que ativar temporariamente:
SET IDENTITY_INSERT [gilvieira].[STAGE].[histBoleto] ON;
-- insert com valor para a coluna id
SET IDENTITY_INSERT [gilvieira].[STAGE].[histBoleto] OFF;
🟠Insert INTO com MERGE
Inserção, atualização e exclusão a partir de uma condição
Primeiro definimos o esqueleto com CREATE TABLE, e depois preenchemos com dados usando INSERT INTO.
Para saber mais detalhes sobre a instrução MERGE, clique aqui!
MERGE INTO dbo.TESTE2 AS target
USING (VALUES ('Ana', 30, '2024‑05‑15')) AS source (NOME, IDADE, NASCIMENTO)
ON target.NOME = source.NOME
WHEN MATCHED THEN
UPDATE SET IDADE = source.IDADE, NASCIMENTO = source.NASCIMENTO
WHEN NOT MATCHED THEN
INSERT (NOME, IDADE, NASCIMENTO)
VALUES (source.NOME, source.IDADE, source.NASCIMENTO);
🟠Insert INTO com Output
O OUTPUT permite retornar os valores inseridos, atualizados ou excluídos, imediatamente após a execução de um comando INSERT, UPDATE ou DELETE.
Durante um INSERT, você pode acessar a pseudotabela inserted, que contém os registros que acabaram de ser inseridos.
É muito útil quando você precisa capturar valores gerados automaticamente, como IDs de colunas IDENTITY, ou simplesmente acompanhar os dados afetados.
Recomendado para quando você deseja capturar o ID de um registro recém-inserido, principalmente em sistemas com relacionamento entre tabelas.
INSERT INTO dbo.TesteExtra (Nome, Cidade)
VALUES ('Lucas', 'Rio de Janeiro');
🟠Insert INTO com CASE
Quando você deseja inserir um valor condicional, com base em alguma lógica simples, diretamente no VALUES. O CASE funciona como um IF dentro do SQL: ele avalia uma condição e retorna um valor correspondente.
INSERT INTO dbo.TesteExtra (Nome, Cidade)
VALUES ('Mariana', CASE WHEN 1 = 1 THEN 'Belo Horizonte' ELSE 'Desconhecida' END);
Se a condição for verdadeira, insere "Belo Horizonte", senão "Desconhecida".
🟠Insert INTO com variáveis
Muito usado em procedures, triggers ou scripts de automação, ao criar scripts dinâmicos ou armazenar valores temporários, variáveis são úteis para reaproveitar dados e tornar o código mais legível e flexível. Você declara variáveis com DECLARE e atribui valores com =. Depois pode usá-las no INSERT
DECLARE @nome NVARCHAR(100) = 'Eduardo';
DECLARE @cidade NVARCHAR(50) = 'Curitiba';
INSERT INTO dbo.TesteExtra (Nome, Cidade)
VALUES (@nome, @cidade);
🟠Insert INTO com WHILE
Você usa um WHILE como um laço de repetição que executa os comandos dentro do BEGIN ... END enquanto a condição for verdadeira.
DECLARE @i INT = 1;
WHILE @i <= 3
BEGIN
INSERT INTO dbo.TesteExtra (Nome, Cidade)
VALUES (CONCAT('Usuario', @i), 'Automatizado');
SET @i += 1;
END;
Obter colunas da tabela e tipo de dado de cada coluna
Precisaremos agora criar uma procedure, clique aqui para saber mais.
Esta procedure não é uma procedure nativa do SQL Server, por este motivo, precisamos criá-la.
CREATE PROCEDURE sp_custom_columns
@table_name NVARCHAR(128)
AS
BEGIN
SET NOCOUNT ON;
SELECT
TABLE_CATALOG AS table_qualifier,
TABLE_SCHEMA AS table_owner,
TABLE_NAME AS table_name,
COLUMN_NAME AS column_name,
COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA + '.' + TABLE_NAME), COLUMN_NAME, 'SystemTypeID') AS data_type,
DATA_TYPE AS type_name,
COALESCE(NUMERIC_PRECISION, CHARACTER_MAXIMUM_LENGTH, DATETIME_PRECISION) AS precision,
CHARACTER_MAXIMUM_LENGTH AS length,
NUMERIC_SCALE AS scale,
CASE
WHEN DATA_TYPE IN ('float', 'real') THEN 2 -- Float uses base 2
WHEN DATA_TYPE IN ('decimal', 'numeric', 'int', 'smallint', 'tinyint', 'bigint') THEN 10
ELSE NULL
END AS radix
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @table_name
ORDER BY ORDINAL_POSITION;
END;
--para usar, execute a procedure com o nome da sua tabela
EXEC sp_custom_columns 'nomeDaTabelaaqui';

🔍 Explicação das colunas:
Coluna | Fonte / cálculo |
table_qualifier | Nome do banco (TABLE_CATALOG) |
table_owner | Schema (TABLE_SCHEMA) |
table_name | Nome da tabela |
column_name | Nome da coluna |
data_type | Usamos COLUMNPROPERTY(..., 'SystemTypeID') para simular o DATA_TYPE do sys.columns |
type_name | Nome do tipo de dados (DATA_TYPE) |
precision | NUMERIC_PRECISION ou CHARACTER_MAXIMUM_LENGTH |
length | Tamanho máximo de caracteres (para nvarchar, etc.) |
scale | Casas decimais, se aplicável |
radix | 10 para inteiros/decimais, 2 para float/real |
Tipo de dados
Criar Tabela com RecCreatedBy e RecModifiedBy
Registrar quem criou ou modificou um registro (e quando isso ocorreu) é essencial para rastreabilidade e auditabilidade em sistemas. Nas tabelas, campos como RecCreatedBy, RecModifiedBy e suas respectivas datas (RecCreatedDate, RecModifiedDate) permitem monitorar mudanças feitas por usuários ou processos.
Para saber mais sobre, clique aqui!
CREATE TABLE funcionarios (
ID INT IDENTITY(1,1) PRIMARY KEY,
nome VARCHAR(50),
idade INT,
RecCreatedBy VARCHAR(50),
RecModifiedBy VARCHAR(50),
RecCreatedDate DATETIME DEFAULT GETDATE(),
RecModifiedDate DATETIME
);