Login Login
MORE

WIDGETS

Widgets

Wanted articles
Who is online?
Article tools

MSSQL:Script Utili2

From Aino Wiki

Jump to: navigation, search

Soluzione a problemi

Resettare campo password in una tabella

Capita di dover resettare un campo password di un record in tabella con una di default conosciuta. Il problema è nel fatto che il campo password è crittografato quindi non si può nè copiare ed incollare semplicemente e nè decodificare quindi si può copiare la password usata in un record per impostare quella di un altra, ecco la tecnica

-- Per prova metto a confronto in un unico rigo la password del record da cambiare
-- con quella del record da usare come copia template
SELECT 
  am_dest.Password P_Dest, 
  am_dest.PasswordSalt P_Dest_salt, 
  am_source.Password P_Source,
  am_source.PasswordSalt P_Source_salt
FROM [FoxCCAccounts].[dbo].[aspnet_Membership] as am_dest,
     [FoxCCAccounts].[dbo].[aspnet_Membership] as am_source
where am_source.UserId = '6D005825-8DE3-4690-B521-E2D5B1F047AC'
	and am_dest.UserId = '4D750AA6-C87A-4FDA-A9A4-C5D66016A251'
 
-- Infine l'update:
UPDATE am_dest
	SET  am_dest.Password = am_source.Password,
		 am_dest.PasswordSalt = am_source.PasswordSalt
FROM [FoxCCAccounts].[dbo].[aspnet_Membership] as am_dest,
     [FoxCCAccounts].[dbo].[aspnet_Membership] as am_source
where am_source.UserId = '6D005825-8DE3-4690-B521-E2D5B1F047AC'
	and am_dest.UserId = '4D750AA6-C87A-4FDA-A9A4-C5D66016A251'

Esecuzione di una store con parametri funzioni

Se si vuol eseguire una store procedure da Management studio passando, ad es, in alcuni parametri la data odierna con la funzione GetDate() occorrerà eludere il problema come segue, usando la valorizzazione esterna dei parametri.

EXEC	[dbo].[p_CU_B_ACC_TRACK_EXT_NZL_Insert]
		@COMPANY_CODE = '071',
		@DIVISION_CODE = '001',
		@CUSTOMER_CODE = '075900MP',
		@DT_CLAIM_LODGED = @data,
		@DT_QUESTIONNAIR_COMPLETE = @data,
		@DT_ENT_APPOINTMENT_SCHEDULED = @data,
		@DT_AUDIOGRAM_SENT = @data,
		@DT_ENT_APPOINTMENT = @data,
		@DT_NEXT_RECALL = @data,
		@FLG_FUNDING_APPROVED = '0',
		@FLG_FUNDING_COMPETITOR = '0',
		@FLG_FUNDING_DECLINED = '0',
		@FLG_NOT_MOTIVATED = '0',
		@FLG_NOT_CONTACT = '0',
		@FLG_NOT_COMPETITOR = '0',
		@FLG_ACC_NEW = '0',
		@FLG_ACC_REAID = '0',
		@USERINSERT = 'SPXMIW2869\giuseppe.aino',
		@ROWGUID = '00000000-0000-0000-0000-000000000000'

Conversioni

Numeri da base a base

Da base N a decimale

CREATE FUNCTION dbo.fn_FromBasenTo10(@String varchar(20),@N int)
RETURNS BIGINT
AS
BEGIN
  DECLARE @Result AS BIGINT = 0,
    @basestring AS VARCHAR(100) = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',
    @digit	AS CHAR,
    @pow	AS BIGINT = 0
 
  WHILE @pow < len(@String) BEGIN
    set @digit = substring(reverse(@String), @Pow+1,1)
    set @Result = @Result + (charindex(@Digit, @baseString) - 1) * power(@N, @pow)
    set @pow = @pow + 1
  END
  RETURN @Result
END
GO
--------------------- Uso --------------------
select dbo.fn_FromBasenTo10('001L9', 36) --Restituirà: 2061

Da base decimale a base 32

CREATE FUNCTION dbo.fn_FromBase10To36
(
    @Val BIGINT
)
RETURNS VARCHAR(9)
AS
BEGIN
    DECLARE @Result VARCHAR(9) = ''
 
    IF (@Val <= 0)
    BEGIN
        RETURN '0'
    END
 
    WHILE (@Val > 0)
    BEGIN
        SELECT @Result = CHAR(@Val % 36 + CASE WHEN @Val % 36 < 10 THEN 48 ELSE 55 END) + @Result,
               @Val = FLOOR(@Val/36)
    END
 
    RETURN @Result
END
GO
--------------------- Uso --------------------
select dbo.fn_FromBase10To36(2061) --Restituirà: '001L9'

Templates

Script in transazione

Esempio di come costruire uno script che, usando una transazione,

-- DEVELOPER NAME – REFERENCE GAP/BUG 
 
SET XACT_ABORT ON;
 
BEGIN TRY
    BEGIN TRANSACTION;
 
    -- Code goes here
 
    COMMIT TRANSACTION;
END TRY
BEGIN CATCH
    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION;
 
    DECLARE
        @ERROR_SEVERITY INT,
        @ERROR_STATE    INT,
        @ERROR_NUMBER   INT,
        @ERROR_LINE     INT,
        @ERROR_MESSAGE  NVARCHAR(4000);
 
    SELECT
        @ERROR_SEVERITY = ERROR_SEVERITY(),
        @ERROR_STATE    = ERROR_STATE(),
        @ERROR_NUMBER   = ERROR_NUMBER(),
        @ERROR_LINE     = ERROR_LINE(),
        @ERROR_MESSAGE  = ERROR_MESSAGE();
 
    RAISERROR('Msg %d, Line %d, :%s',
        @ERROR_SEVERITY,
        @ERROR_STATE,
        @ERROR_NUMBER,
        @ERROR_LINE,
        @ERROR_MESSAGE);
END CATCH

Correzione di errori

Autenticazione

Se da una una applicazione WEB .Net non si riesce ad accedere al DB, usando l'autenticazione integrata di Windows, a causa del seguente errore:

Login failed for user 'IIS APPPOOL\DefaultAppPool'

Ciò è dovuto al fatto che l'utente IIS non ha diritti per acedere al DB neanche in sola lettura. Il seguente script, da lanciare sul DB Master, crea una nuova Login e nuovo utente da associare all'aplication Pool, ATTENZIONE che dopo averlo fatto occorrerà finalmente associare i diritti\ruoli che si vogliono all'utente sul DB su cui si vuol lavorare.

IF NOT EXISTS (SELECT name FROM sys.server_principals WHERE name = 'IIS APPPOOL\DefaultAppPool')
BEGIN
    CREATE LOGIN [IIS APPPOOL\DefaultAppPool] 
      FROM WINDOWS WITH DEFAULT_DATABASE=[master], 
      DEFAULT_LANGUAGE=[us_english]
END
GO
CREATE USER [WebDatabaseUser] 
  FOR LOGIN [IIS APPPOOL\DefaultAppPool]
GO
EXEC sp_addrolemember 'db_owner', 'WebDatabaseUser'
GO

Constraint

Toglierli

Per singola tabella

ALTER TABLE tableName NOCHECK CONSTRAINT ALL

Per TUTTE le tabelle in automatico

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Ristabilirli

Per singola tabella

ALTER TABLE tableName WITH CHECK CHECK CONSTRAINT ALL

Per TUTTE le tabelle in automatico

EXEC sp_msforeachtable 'ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all'

Per tutte le tabelle senza interruzione al primo errore:


Mappa e Link


MS SQL |



Parole chiave:

Author