Karuta’s ASP & M$ SQLserver

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

Arquivo da categoria ‘store procedure’

Gerar todas as chaves estrangeiras (primary keys) para o banco de dados

Publicado por karuta em Julho 24, 2009

– Get all existing primary keys
DECLARE cPK CURSOR FOR

SELECT DISTINCT C.TABLE_NAME, C.CONSTRAINT_NAME , F.NAME
FROM SYS.INDEXES I
INNER JOIN SYS.FILEGROUPS F
ON I.DATA_SPACE_ID = F.DATA_SPACE_ID
INNER JOIN SYS.ALL_OBJECTS O
ON I.[OBJECT_ID] = O.[OBJECT_ID]
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS C
ON O.NAME = C.TABLE_NAME
WHERE C.CONSTRAINT_TYPE = ‘PRIMARY KEY’
ORDER BY C.TABLE_NAME

DECLARE @PkTable SYSNAME
DECLARE @PkName SYSNAME
DECLARE @FileName SYSNAME

–Loop through all the primary keys
OPEN cPK
FETCH NEXT FROM cPK INTO @PkTable, @PkName , @FileName
WHILE (@@FETCH_STATUS = 0)
BEGIN
DECLARE @PKSQL NVARCHAR(4000) SET @PKSQL = ”
SET @PKSQL = ‘ALTER TABLE ‘ + @PkTable + ‘ ADD CONSTRAINT ‘ + @PkName + ‘ PRIMARY KEY CLUSTERED (‘

–Get all columns for the current primary key
DECLARE cPKColumn CURSOR FOR
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_NAME = @PkTable AND CONSTRAINT_NAME = @PkName
ORDER BY ORDINAL_POSITION
OPEN cPKColumn

DECLARE @PkColumn SYSNAME
DECLARE @PkFirstColumn BIT SET @PkFirstColumn = 1
– Loop through all columns and append the sql statement
FETCH NEXT FROM cPKColumn INTO @PkColumn
WHILE (@@FETCH_STATUS = 0)
BEGIN
IF (@PkFirstColumn = 1)
SET @PkFirstColumn = 0
ELSE
SET @PKSQL = @PKSQL + ‘, ‘

SET @PKSQL = @PKSQL + @PkColumn

FETCH NEXT FROM cPKColumn INTO @PkColumn
END
CLOSE cPKColumn
DEALLOCATE cPKColumn

SET @PKSQL = @PKSQL + ‘)’ + ‘ ON ‘+@FileName
– Print the primary key statement
PRINT @PKSQL

FETCH NEXT FROM cPK INTO @PkTable, @PkName, @FileName
END
CLOSE cPK
DEALLOCATE cPK

Enviado em store procedure | Deixar um comentário »

sp_MSforeachdb e sp_MSforeachtable

Publicado por karuta em Maio 26, 2009

Sempre que precisamos executar alguma instrução em todos os databases ou em todas as tabelas de um database, logo pensamos em usar cursor. No entanto, existe duas stored procedures não documentadas que podem resolver este problema de forma bastante simples. Este artigo discute como usar as procedures sp_MSforeachdb e sp_MSforeachtable.

Para ler o artigo completo e saber como utilizar estas procedures, visite o link http://www.dbazine.com/sql/sql-articles/larsen5″

Enviado em store procedure | Deixar um comentário »

Procurando uma palavra nas stored procedures do database

Publicado por karuta em Maio 26, 2009

Em determinadas situações precisamos procurar uma palavra nas stored procedures de um determinado database. Abaixo segue um script em Transact-SQL que retorna o nome da(s) stored procedure(s). Atente para o fato de trocar DtgSchemaOBJECT pela palavra desejada:

declare @searchString varchar(100)

Set @searchString = ‘%’ + ‘DtgSchemaOBJECT’ + ‘%’

SELECT Distinct SO.Name
FROM sysobjects SO (NOLOCK)
INNER JOIN syscomments SC (NOLOCK) on SO.Id = SC.ID
AND SO.Type = ‘P’
AND SC.Text LIKE @searchString
ORDER BY SO.Name

Texto escrito por Alexandre Lopes para meus estudos de SQL SERVER

Enviado em store procedure | Deixar um comentário »

ALTERAR SCHEMA SQLSERVER

Publicado por karuta em Abril 27, 2009

– alterar SCHEMA todas SPs
SELECT ‘ALTER SCHEMA dbo TRANSFER ‘ + s.Name + ‘.’ + p.Name FROM sys.Procedures p
INNER JOIN sys.Schemas s on p.schema_id = s.schema_id WHERE s.Name = ‘dbo’

– alterar SCHEMA todas TABELAS
exec sp_MSforeachtable “ALTER SCHEMA dbo TRANSFER ? PRINT ‘? modified’ “

– alterar SCHEMA todas VIEWS
SELECT ‘ALTER SCHEMA dbo TRANSFER ‘ + s.Name + ‘.’ + p.Name FROM sys.Views p
INNER JOIN sys.Schemas s on p.schema_id = s.schema_id WHERE s.Name = ‘dbo’

Enviado em store procedure | Deixar um comentário »

Problemas com criação de um Diagrama (database diagrams) no sql2005

Publicado por karuta em Abril 24, 2009

 

erro = “Database diagram support objects cannot be installed because this database does not have a valid owner”

No SQL Server Management Studio verifique:

 

1. Right Click no seu database, vá em “properties”

2. Acesse a opção “Options” em “Select a page”

3. Veja se a combo “Compatibility Level” está em “SQL Server 2005(90)”

 

Se tudo estiver correto mude sua autorização para “sa” com o comando abaixo:

 
ALTER AUTHORIZATION ON DATABASE::[Nome do Database] TO sa

Enviado em sql server, store procedure | Deixar um comentário »

Remover “caracteres especiais” em campos do SQL Server

Publicado por karuta em Abril 8, 2009

REPLACE(REPLACE(REPLACE(MyField, CHAR(10), ”), CHAR(13), ”), CHAR(9), ”)

Enviado em store procedure | Deixar um comentário »

Fazendo um SELECT RANDÔMICO

Publicado por karuta em Março 17, 2009

Select a random row with MySQL:

SELECT column FROM table
ORDER BY RAND()
LIMIT 1

Select a random row with PostgreSQL:

SELECT column FROM table
ORDER BY RANDOM()
LIMIT 1

Select a random row with Microsoft SQL Server:

SELECT TOP 1 column FROM table
ORDER BY NEWID()

Select a random row with IBM DB2

SELECT column, RAND() as IDX
FROM table
ORDER BY IDX FETCH FIRST 1 ROWS ONLY

Thanks Tim

Select a random record with Oracle:

SELECT column FROM
( SELECT column FROM table
ORDER BY dbms_random.value )
WHERE rownum = 1

Enviado em sql server, store procedure | Deixar um comentário »

Resultado de um SELECT separado por VIRGULA

Publicado por karuta em Junho 17, 2008

DECLARE @resultado VARCHAR(MAX)
SELECT @resultado = COALESCE(@resultado + ‘,’ ,”) + [coluna da tabela]
FROM [tabela]
SELECT @resultado

Enviado em store procedure | Deixar um comentário »

Função Obter o Dia da Semana

Publicado por karuta em Junho 5, 2008

CREATE FUNCTION dbo.udf_DayOfWeek(@dtDate DATETIME)
RETURNS VARCHAR(10)
            
AS
    BEGIN
    DECLARE 
@rtDayofWeek VARCHAR(10)
    
DECLARE @weekDay INT
        
– Here I have subtracted 7 For keeping Sunday as the First day
        – like wise for Monday we need to subtract 2 and so on
        
SET @weekDay ((DATEPART(dw,GETDATE())+@@DATEFIRST-7)%7)
    
SELECT @rtDayofWeek CASE @weekDay
                    
WHEN THEN ‘Sunday’
                    
WHEN THEN ‘Monday’
                    
WHEN THEN ‘Tuesday’
                    
WHEN THEN ‘Wednesday’
                    
WHEN THEN ‘Thursday’
                    
WHEN THEN ‘Friday’
                    
WHEN THEN ‘Saturday’
        
END
    RETURN 
(@rtDayofWeek)
    
END
GO
SELECT dbo.udf_DayOfWeek(GETDATE())

(script modificado por Mihir Pop)

 

Enviado em store procedure | Deixar um comentário »

Quais Store Procedures foram modificadas

Publicado por karuta em Junho 3, 2008

– 7 no final do código = 7 dias atrás
SELECT name
    FROM sys.objects
    WHERE type = ‘P’
        AND DATEDIFF(D,modify_date, GETDATE()) < 7

Em tempo – Você pode alterar o type P para qualquer um listado abaixo:
C = CHECK constraint
D = Default or DEFAULT constraint
F = FOREIGN KEY constraint
L = Log
P = Stored procedure
PK = PRIMARY KEY constraint (type is K)
RF = Replication filter stored procedure
S = System table
TR = Trigger
U = User table
UQ = UNIQUE constraint (type is K)
V = View
X = Extended stored procedure

Enviado em store procedure | Deixar um comentário »