Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1 - MANIPULAO DE DADOS SELECT select_list [ INTO new_table_name ] FROM table_list [ WHERE search_conditions ] [ GROUP BY group_by_list ] [ HAVING search_conditions ] [ ORDER BY order_list [ ASC | DESC ] ] select_list Descreve as colunas do conjunto de resultados. uma lista de expresses separadas por vrgulas. Cada expresso define o formato (tipo de dados e tamanho) e a fonte dos dados para a coluna do conjunto de resultados. Cada expresso de lista de seleo tipicamente uma referncia a uma coluna na tabela de origem ou exibio de onde os dados provm, mas pode ser qualquer outra expresso, como uma constante ou uma funo Transact-SQL. O uso da expresso * em uma lista de seleo especifica que todas as colunas da tabela de origem so retornadas. INTO new_table_name Especifica que o conjunto de resultados usado para criar uma nova tabela. new_table_name especifica o nome da tabela nova. FROM table_list Contm uma lista das tabelas das quais os dados do conjunto de resultados so recuperados. Essas fontes podem ser: Tabelas base no servidor local que executa o SQL Server. Exibies na instncia local do SQL Server. O SQL Server resolve internamente uma referncia de exibio para referncias nas tabelas base que compem a exibio. Tabelas vinculadas. So tabelas em fontes de dados OLE DB que podem ser acessadas pelo SQL Server. Isso referido como consulta distribuda. Fontes de dados OLE DB podem ser acessadas no SQL Server vinculando-as como servidor vinculado ou referenciando a fonte de dados em uma funo OPENROWSET ou OPENQUERY. A clusula FROM tambm pode conter especificaes de juno. Isso define o caminho especfico que o SQL Server dever usar para navegar de uma tabela para outra. A clusula FROM tambm usada nas instrues DELETE e UPDATE para definir as tabelas que so modificadas. WHERE search_conditions A clusula WHERE um filtro que define as condies que cada linha das tabelas de origem deve atender para qualificar-se para a clusula SELECT. Apenas linhas que atendem s condies colaboram com dados para o conjunto de resultados. Dados de linhas que no atendem s condies no so usados.
Pg. 1 de 18 04/09/2010
Pg. 3 de 18 04/09/2010
Operadores lgicos. OPERADOR = <> > < >= <= !> !< != Igualdade Desigualdade Maior que Menor que Maior ou igual a Menor ou igual a No maoir que No menor que No igual DESCRIO
Pg. 4 de 18 04/09/2010
Pg. 5 de 18 04/09/2010
Pg. 6 de 18 04/09/2010
6 Listagem de produtos que foram movimentados no ms de abril de 2005 no movimento de ordem de compras, trazer o cdigo do produto, nome fantasia, numero do movimento, data de emisso e valor liquido.
7 Liste os produtos que tiveram ordem de compra cujo o valor total do item seja maior que 1000(mil), trazer como informao: numero do movimento, numero de sequncia, cdigo do produto, valor total.
8 listar todas as ordens de compra que no estiverem canceladas e foram emitidas no ms de fevereiro de 2006, trazendo o numero da ordem de compra, o valor bruto, valor liquido, subtotal.
Pg. 7 de 18 04/09/2010
Funes escalares As funes escalares definidas pelo usurio retornam um nico valor de dados do tipo definido na clusula RETURNS. Para uma funo escalar embutida, no h nenhum corpo de funo; o valor escalar o resultado de uma nica instruo. Para uma funo escalar com vrias instrues, o corpo da funo, definido em um bloco BEGINEND, contm uma srie de instrues do Transact SQL que retornam o valor nico. O tipo de retorno pode ser em qualquer tipo de dados, exceto texto, ntext, imagem, cursor e carimbo de data/hora. Funes com valor de tabela As funes com valor de tabela definidas pelo usurio retornam um tipo de dados de tabela. Para uma funo com valor de tabela embutida, no h corpo de funo; a tabela o conjunto de resultados de uma nica instruo SELECT. Para uma funo com valor de tabela com vrias instrues, o corpo de funo, definido em um bloco BEGIN... END, contm uma srie de instrues do Transact-SQL que criam e inserem linhas na tabela que ser retornada. Funes internas As funes internas so fornecidas pelo SQL Server para ajudar voc a executar uma variedade de operaes. Elas no podem ser modificadas. Voc pode usar funes internas em instrues do Transact-SQL para: Acessar informaes de tabelas do sistema SQL Server sem acessar os tabelas do sistema diretamente. Executar tarefas comuns como SUM, GETDATE ou IDENTITY.
Funes internas retornam os tipos de dados escalar ou de tabela. Por exemplo, @@ERROR retorna 0 se a ltima instruo do Transact-SQL tiver sido executada com xito. Se a instruo gerou um erro, @@ERROR retorna o nmero do erro. E a funo SUM(parameter) retorna a soma de todos os valores do parmetro. Abaixo uma tabela contendo algumas funes internas que podem ser bastante teis Funo APP_NAME Expresso CASE CAST e CONVERT Descrio Retorna o nome do aplicativo para a sesso atual se definido pelo aplicativo Avalia uma lista de condies e retorna uma das vrias expresses de resultado possveis. Converte uma expresso de um tipo de dados para outro.
Pg. 8 de 18 04/09/2010
COLUMNS_UPDATED
CURRENT_TIMESTAMP
CURRENT_USER
DATALENGTH
Funes escalares
As funes escalares definidas pelo usurio retornam um valor nico de dados do tipo definido na clusula RETURNS. Para uma funo escalar embutida, no h um corpo de funo; o valor escalar o resultado de uma nica instruo. Para uma funo escalar de vrias instrues, o corpo da funo, definido em um bloco BEGIN...END, contm uma srie de instrues Transact-SQL, que retornam o valor nico. O tipo de retorno pode ser qualquer tipo de dados, exceto text, ntext, image, cursore timestamp. Os exemplos a seguir criam uma funo escalar de vrias instrues. A funo pega um valor de entrada, um ProductID, e retorna um nico valor de dados, a quantidade agregada do produto especificado no inventrio. Exemplo: USE AdventureWorks2008R2; GO IF OBJECT_ID (N'dbo.ufnGetInventoryStock', N'FN') IS NOT NULL DROP FUNCTION ufnGetInventoryStock; GO CREATE FUNCTION dbo.ufnGetInventoryStock(@ProductID int) RETURNS int AS -- Returns the stock level for the product. BEGIN DECLARE @ret int; SELECT @ret = SUM(p.Quantity) FROM Production.ProductInventory p WHERE p.ProductID = @ProductID AND p.LocationID = '6'; IF (@ret IS NULL)
Desenvolvido por: Alexandre G. Silva TOTVS ES Pg. 9 de 18 04/09/2010
O exemplo a seguir usa a funo ufnGetInventoryStock, para retornar a quantidade atual do inventrio dos produtos que tm um ProductModelIDentre 75 e 80. Exemplo: USE AdventureWorks2008R2; GO SELECT ProductModelID, Name, dbo.ufnGetInventoryStock(ProductID)AS CurrentSupply FROM Production.Product WHERE ProductModelID BETWEEN 75 and 80; GO Funes com valor de tabela
As funes com valor de tabela definidas pelo usurio retornam um tipo de dados table. Para uma funo com valor de tabela embutida, no h um corpo de funo; a tabela o conjunto de resultados de uma nica instruo SELECT. O exemplo a seguir cria uma funo com valor de tabela embutida. A funo pega um parmetro de entrada, um ID cliente (loja), e retorna as colunas ProductID, Name e a agregao das vendas do ano, at a data atual, como YTD Total para cada produto vendido para a loja. Exemplo: USE AdventureWorks2008R2; GO IF OBJECT_ID (N'Sales.ufn_SalesByStore', N'IF') IS NOT NULL DROP FUNCTION Sales.ufn_SalesByStore; GO CREATE FUNCTION Sales.ufn_SalesByStore (@storeid int) RETURNS TABLE AS RETURN ( SELECT P.ProductID, P.Name, SUM(SD.LineTotal) AS 'Total' FROM Production.Product AS P JOIN Sales.SalesOrderDetail AS SD ON SD.ProductID = P.ProductID JOIN Sales.SalesOrderHeader AS SH ON SH.SalesOrderID = SD.SalesOrderID JOIN Sales.Customer AS C ON SH.CustomerID = C.CustomerID WHERE C.StoreID = @storeid GROUP BY P.ProductID, P.Name ); GO
Para uma funo com valor de tabela de vrias instrues, o corpo da funo definido em um bloco BEGIN...END contm uma srie de instrues Transact-SQL, que criam e inserem linhas na tabela que ser retornada. O exemplo a seguir cria uma funo com valor de tabela. A funo toma um nico parmetro de entrada, um EmployeeID e retorna uma lista de todos os funcionrios que reportam direta ou indiretamente ao funcionrio especificado. A funo que especifica a ID do funcionrio 109 invocada em seguida. Exemplo: USE AdventureWorks2008R2; GO IF OBJECT_ID (N'dbo.ufn_FindReports', N'TF') IS NOT NULL DROP FUNCTION dbo.ufn_FindReports; GO CREATE FUNCTION dbo.ufn_FindReports (@InEmpID INTEGER) RETURNS @retFindReports TABLE ( EmployeeID int primary key NOT NULL, FirstName nvarchar(255) NOT NULL, LastName nvarchar(255) NOT NULL, JobTitle nvarchar(50) NOT NULL, RecursionLevel int NOT NULL ) --Returns a result set that lists all the employees who report to the --specific employee directly or indirectly.*/ AS BEGIN WITH EMP_cte(EmployeeID, OrganizationNode, FirstName, LastName, JobTitle, RecursionLevel) -CTE name and columns AS ( SELECT e.BusinessEntityID, e.OrganizationNode, p.FirstName, p.LastName, e.JobTitle, 0 -- Get the initial list of Employees for Manager n FROM HumanResources.Employee e INNER JOIN Person.Person p ON p.BusinessEntityID = e.BusinessEntityID WHERE e.BusinessEntityID = @InEmpID UNION ALL SELECT e.BusinessEntityID, e.OrganizationNode, p.FirstName, p.LastName, e.JobTitle, RecursionLevel + 1 -- Join recursive member to anchor FROM HumanResources.Employee e INNER JOIN EMP_cte ON e.OrganizationNode.GetAncestor(1) = EMP_cte.OrganizationNode INNER JOIN Person.Person p ON p.BusinessEntityID = e.BusinessEntityID ) -- copy the required columns to the result of the function INSERT @retFindReports
Desenvolvido por: Alexandre G. Silva TOTVS ES Pg. 11 de 18 04/09/2010
Pg. 12 de 18 04/09/2010
Ao criar um procedimento armazenado, voc deve especificar: Qualquer parmetro de entrada e sada para o procedimento de chamada ou lote. As instrues de programao que executam operaes no banco de dados, inclusive de chamada de outros procedimentos. O valor de status retornado ao procedimento ou lote de chamada para indicar sucesso ou falha (e o motivo da falha). Qualquer instruo de tratamento de erros necessria para detectar e tratar erros potenciais. As funes de tratamento de erros como ERROR_LINE e ERROR_PROCEDURE podem ser especificadas no procedimento armazenado. Para obter mais informaes, consulte Usando TRY...CATCH em Transact-SQL. Nomeando procedimentos armazenados Recomendamos que voc no crie qualquer procedimento armazenado usando sp_ como um prefixo. SQL Server usa o prefixo sp_ para designar procedimentos armazenados do sistema. O nome escolhido pode estar em conflito com algum procedimento de sistema futuro. Se seu aplicativo usar referncias de nome qualificado fora do esquema e seu nome de procedimento conflitar com um nome de procedimento do sistema, seu aplicativo falhar, pois o nome ser associado ao procedimento do sistema, no ao seu. Um procedimento armazenado definido pelo usurio que possui o mesmo nome como um procedimento armazenado do sistema que seja no qualificado ou estiver no esquema dbo nunca ser executado; em vez disso ser executado sempre o procedimento armazenado do sistema. O exemplo a seguir demonstra esse comportamento.
Pg. 13 de 18 04/09/2010
Pg. 14 de 18 04/09/2010
Pg. 16 de 18 04/09/2010
Exemplo: DECLARE @ComparePrice money, @Cost money EXECUTE Production.uspGetList '%Bikes%', 700, @ComparePrice OUT,
Desenvolvido por: Alexandre G. Silva TOTVS ES Pg. 17 de 18 04/09/2010
Pg. 18 de 18 04/09/2010