Buongiorno a tutti,
dato che questo è il mio primo post, mi presento:
sono Keith, lavoro in una media azienda e da un paio di mesi sono stato catapultato al CED a sviluppare applicazioni. Purtroppo SQL è un argomento a cui non mi ero mai interessato fino a quel momento.
Detto questo, ho un quesito per voi:
ho creato una query per eliminare tutti i campi
NULL da una tabella
DECLARE @nomeTabella nvarchar(100) = ' INSERIRE NOME TABELLA '
DECLARE @nome varchar(50)
DECLARE @tipo varchar(50)
DECLARE @CMD NVARCHAR (200)
DECLARE db_cursor CURSOR FOR
SELECT c.name, t.name AS Dtype
FROM sys.columns c
INNER JOIN sys.types t
ON t.system_type_id = c.system_type_id
WHERE c.[object_id] =
(SELECT [object_id] FROM sys.objects WHERE type = 'U' AND [name] = @nomeTabella)
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @nome, @tipo
WHILE @@FETCH_STATUS = 0 BEGIN
SET @CMD = 'UPDATE ' + @nomeTabella + ' SET ' + quotename(@nome) +' = ' +
(CASE
WHEN (@tipo = 'bit') THEN '0'
WHEN (@tipo = 'int') THEN '0'
WHEN (@tipo = 'decimal') THEN '0'
WHEN (@tipo = 'date') THEN '''1/1/1900'''
WHEN (@tipo = 'datetime') THEN '''1/1/1900'''
WHEN (@tipo = 'uniqueidentifier') THEN '00000000-0000-0000-0000-000000000000'
ELSE ''''''
END )
+ ' WHERE ' + quotename(@nome) + ' IS NULL'
PRINT @CMD
EXEC sp_executeSQL @cmd
FETCH NEXT FROM db_cursor INTO @nome, @tipo
END
CLOSE db_cursor
DEALLOCATE db_cursor
Fatta la query, faccio la stored procedure:
ALTER PROCEDURE [dbo].[sp_PulisciNull]
@nomeTabella nvarchar(100)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @TSQL varchar(max)
SELECT @TSQL = '
USE [Logika]
DECLARE @nomeTabella varchar(50) = '' + @nomeTabella + ''
DECLARE @nome varchar(50)
DECLARE @Tipo varchar(50)
DECLARE @CMD NVARCHAR (200)
DECLARE db_cursor CURSOR FOR
SELECT c.name, t.name AS Dtype
FROM sys.columns c
INNER JOIN sys.types t
ON t.system_type_id = c.system_type_id
WHERE c.[object_id] =
(SELECT [object_id] FROM sys.objects WHERE type = ''U'' AND [name] = @nomeTabella)
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @nome, @Tipo
WHILE @@FETCH_STATUS = 0 BEGIN
SET @CMD = ''UPDATE '' + @nomeTabella + '' SET '' + quotename(@nome) + '' = '' +
(CASE
WHEN (@Tipo = ''bit'') THEN ''0''
WHEN (@Tipo = ''int'') THEN ''0''
WHEN (@Tipo = ''decimal'') THEN ''0''
WHEN (@Tipo = ''date'') THEN ''1/1/1900''
WHEN (@Tipo = ''datetime'') THEN ''1/1/1900''
WHEN (@Tipo = ''uniqueidentifier'') THEN
''00000000-0000-0000-0000-000000000000''
ELSE
''''
END )
+ '' WHERE '' + quotename(@nome) +'' IS NULL''
--PRINT @CMD
EXEC sp_executeSQL @cmd
FETCH NEXT FROM db_cursor INTO @nome, @Tipo
END
CLOSE db_cursor
DEALLOCATE db_cursor '''
EXEC (@TSQL)
END
In esecuzione ottengo questo:
Messaggio 105, livello 15, stato 1, riga 46
Virgoletta di chiusura mancante dopo la stringa di caratteri ''.
(Righe interessate: 1)
Le ho provate tutte per trovare la giusta combinazione di apici, qualcuno ha una dritta?