Karuta’s ASP & M$ SQLserver

Dicas, códigos e outras coisinhas de meus estudos para não esquecer…

Archive for the ‘sql server’ Category

SQL SERVER – Database Size Limitation in SQL Express

Posted by karuta em outubro 21, 2015

SQL 2000 Desktop Engine (MSDE) has limit of 2 GB data file(s) size.

SQL 2005 Express Edition has limit of 4 GB data file(s) size.

SQL 2008, SQL 2008 R2, SQL 2012 and SQL 2014 Express Edition has limit of 10 GB data file(s) size.

Posted in sql server | Leave a Comment »

CROSS APPLY

Posted by karuta em outubro 16, 2015

Hoje eu vou falar sobre o APPLY. Esse cara serve para fazer uma espécie de JOIN só que sem a clausula ON onde o INNER esta para o CROSS assim como o LEFT ou o RIGHT para o OUTER. Isso resulta em coisas do tipo:

SELECT      T.Nome, CA.Nome,  CA.Gols
FROM        time       T
CROSS APPLY (SELECT * FROM jogador J WHERE J.idTime = T.idTime) CA

Que tem exatamente o mesmo plano de execução e resultado disso aqui:

SELECT      T.Nome,           J.Nome,           J.Gols
FROM        time        T
INNER JOIN  Jogador     J      ON          J.idTime    = T.idTime

Então o que torna esse cara especial? Em minha opinião e experiência uma das coisas mais interessantes e com um grande potencial são as pesquisas com o TOP(n) onde o n tem uma variação de acordo com a regra de negócio em questão e, ainda mais importante, o fato de você conseguir fazer consultas com funções que retornam tabelas!

CREATE FUNCTION Exemplo(@id AS int, @n AS INT)

RETURNS TABLE

AS

RETURN

SELECT      TOP(@n)     *

FROM        jogador     j

WHERE       j.idTime    = @id

ORDER BY    j.Gols      DESC

GO

SELECT            *

FROM        Time  t

CROSS APPLY dbo.Exemplo(t.idTime, CASE WHEN(t.idTime=1) THEN 1 ELSE 2 END)

ORDER BY    t.IdTime    ASC

Vejam que as possibilidades com esse operador são grandes porem no dia a dia da “firma” são raros os casos onde ele pode/precisa ser utilizado.

 

CRÉDITOS E AGRADECIMENTOS: 

http://stackoverflow.com/questions/1139160/when-should-i-use-cross-apply-over-inner-join

Posted in sql server | Leave a Comment »

Script – ver todas as tabelas em um banco de dados

Posted by karuta em janeiro 23, 2015

SELECT name FROM sysobjects WHERE xtype=’U’ order by name

Posted in sql server | Leave a Comment »

execute mathematical formula stored as string

Posted by karuta em novembro 10, 2014

Declare @weight as char(25)
Declare @output as numeric(18,2)

SET @weight = '2*5+2*5*4'
declare @TheSQL nvarchar(1000)
Set @TheSQL = 'Select @theoutput = ' + @weight


--OutPut should be 50.
exec sp_executesql @stmt = @TheSQL
    , @params= N'@theoutput int OUTPUT' 
	, @theoutput = @output output

print @output


links úteis para pesquisa:
http://www.itjungle.com/fhg/fhg111004-story01.html
http://sqlblogcasts.com/blogs/madhivanan/archive/2008/01/16/beware-of-implicit-conversions.aspx

Posted in sql server, store procedure | Leave a Comment »

UPDATE from SELECT using SQL Server

Posted by karuta em agosto 15, 2014

UPDATE
    Table
SET
    Table.col1 = other_table.col1,
    Table.col2 = other_table.col2
FROM
    Table
INNER JOIN
    other_table
ON
    Table.id = other_table.id

Posted in sql server | Leave a Comment »

Limpando logs de bases no SQL Server

Posted by karuta em agosto 7, 2014

backup log “BANCODEDADOS” with truncate_only
go

dbcc shrinkdatabase (’BANCODEDADOS’, 0)
go

Onde, BANCODEDADOS é o nome do banco onde fará manutenção. O primeiro comando faz um backup dos registros do log. O segundo, limpa os arquivos inúteis do banco, como logs gigantescos. 

Posted in sql server | Leave a Comment »

DIVISÃO NO SQL – MAIS DIGITOS APÓS A VIRGULA

Posted by karuta em julho 31, 2014

select 0.59 / 350 as resultado1
select CAST(0.59 as float) / CAST(350 as float) as resultado2

resultado1
—————————————
0.001685

(1 row(s) affected)

resultado2
———————-
0,00168571428571429

(1 row(s) affected)

Posted in sql server | Leave a Comment »

Envio dados SQL SERVER – ASP – ADO – adLongVarChar

Posted by karuta em julho 30, 2014

[Microsoft][ODBC SQL Server Driver]String data, right truncation

http://www.w3schools.com/asp/ado_datatypes.asp

varchar(MAX) can be used from ADO as an input parameter. The data type in this case would be adLongVarChar

Se acontecer problemas no tamanho do texto que você precisa enviar para o banco de dados, use o parametro: 201 = adLongVarChar

 

rsInserirRoyalty_cmd.Parameters.Append rsInserirRoyalty_cmd.CreateParameter(“param3”, 201, 1, -1, v0)

Posted in asp, sql server | Leave a Comment »

SQL SERVER IF ISNUMERIC

Posted by karuta em julho 10, 2014

There is no boolean in SQL Server. This means you can’t just say IF (expression); you must compare it to something, because it does return true or false in the same sense as you’re probably used to in other languages.

Just a preference, but I would prefer to write it this way:

IF ISNUMERIC('5675754674') = 1
 BEGIN
 ...
 END

There is no way in SQL Server to avoid the comparison to 1, as in your second example.

Also as an aside you should be aware of the weaknesses of ISNUMERIC() – it can give false positives for “numeric” values such as ., CHAR(9), e, $ and a host of other non-numeric strings. If you want to know if something is an integer, for example, better to say:

IF '5675754674' NOT LIKE '%[^0-9]%'
 BEGIN
 ...
 END

But even that is not a complete and valid test because it will return true for values > (2^32)-1 and it will return false for negative values.

Another downside to ISNUMERIC() is that it will return true if the value can be converted to any of the numeric types, which is not the same as all numeric types. Often people test for ISNUMERIC() and then try to cast a FLOAT to a SMALLINT and the conversion fails.

In SQL Server 2012 you will have a new method called TRY_CONVERT() which returns NULL if the conversion to the specified data type is not valid.

tks Aaron Bertrand (credit)

Posted in sql server | Leave a Comment »

Is it possible to use Aggregate function in a Select statment without using Group By clause?

Posted by karuta em novembro 22, 2013

You can use Select AGG() OVER() in TSQL

SELECT *,
SUM(Value) OVER()
FROM Table

There are other options for Over such as Partition By if you want to group:

SELECT *,
SUM(Value) OVER(PARTITION By ParentId)
FROM Table

http://msdn.microsoft.com/en-us/library/ms189461.aspx

Posted in sql server | Leave a Comment »