Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 如何将表中的所有空字符串字段更新为null?_Sql Server 2005_Null_Sql - Fatal编程技术网

Sql server 2005 如何将表中的所有空字符串字段更新为null?

Sql server 2005 如何将表中的所有空字符串字段更新为null?,sql-server-2005,null,sql,Sql Server 2005,Null,Sql,我有一个表,有15列,其中10列是字符串值,大约50000行。 它包含很多空字符串值。。。我搜索是否有一个查询,我可以为它传递一个表名以迭代所有值,如果它等于空,则将其更新为空。这是一种基于表的简单方法。只需将表名传递给proc。您还可以创建一个姐妹进程来循环思想表名称,并在while循环中调用该进程来处理循环逻辑中的每个表 UPDATE mytable SET col1 = NULLIF(col1, ''), col2 = NULLIF(col2, ''),

我有一个表,有15列,其中10列是字符串值,大约50000行。
它包含很多空字符串值。。。我搜索是否有一个查询,我可以为它传递一个表名以迭代所有值,如果它等于空,则将其更新为空。

这是一种基于表的简单方法。只需将表名传递给proc。您还可以创建一个姐妹进程来循环思想表名称,并在while循环中调用该进程来处理循环逻辑中的每个表

UPDATE mytable
   SET col1 = NULLIF(col1, ''),
       col2 = NULLIF(col2, ''),
       ...
CREATE PROC setNullFields 
(@TableName NVARCHAR(100))        
AS    

CREATE TABLE #FieldNames    
(    
pk INT IDENTITY(1, 1) ,    
Field NVARCHAR(1000) NULL    
);    

INSERT INTO #FieldNames    
SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @TableName 

DECLARE @maxPK INT;    
SELECT @maxPK = MAX(PK) FROM #FieldNames    

DECLARE @pk INT;    
SET @pk = 1    

DECLARE @dynSQL NVARCHAR(1000) 

WHILE @pk <= @maxPK    
BEGIN    

 DECLARE @CurrFieldName NVARCHAR(100);    
 SET @CurrFieldName = (SELECT Field FROM #FieldNames WHERE PK = @pk)    

    -- update the field to null here:

    SET @dynSQL = 'UPDATE ' + @TableName + ' SET ' + @CurrFieldName + ' = NULLIF('+ @CurrFieldName+ ', '''' )' 
    EXEC (@dynSQL)

 SELECT @pk = @pk + 1    
END    

这是一种基于表的简单方法。只需将表名传递给proc。您还可以创建一个姐妹进程来循环思想表名称,并在while循环中调用该进程来处理循环逻辑中的每个表

CREATE PROC setNullFields 
(@TableName NVARCHAR(100))        
AS    

CREATE TABLE #FieldNames    
(    
pk INT IDENTITY(1, 1) ,    
Field NVARCHAR(1000) NULL    
);    

INSERT INTO #FieldNames    
SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @TableName 

DECLARE @maxPK INT;    
SELECT @maxPK = MAX(PK) FROM #FieldNames    

DECLARE @pk INT;    
SET @pk = 1    

DECLARE @dynSQL NVARCHAR(1000) 

WHILE @pk <= @maxPK    
BEGIN    

 DECLARE @CurrFieldName NVARCHAR(100);    
 SET @CurrFieldName = (SELECT Field FROM #FieldNames WHERE PK = @pk)    

    -- update the field to null here:

    SET @dynSQL = 'UPDATE ' + @TableName + ' SET ' + @CurrFieldName + ' = NULLIF('+ @CurrFieldName+ ', '''' )' 
    EXEC (@dynSQL)

 SELECT @pk = @pk + 1    
END    

有没有其他方法可以使它不写列名,因为我想将其应用于许多表?也许您可以使用信息模式来找出要将其应用于的列,并动态生成SQL。有没有其他方法可以使它不写列名,因为我想将其应用于许多表?也许您可以使用信息\u架构,以找出要将其应用于的列并动态生成SQL。这很好,但如果我有名为“ID”的标识列,它将生成错误,无法更新标识列“ID”。这很好,但如果我有名为“ID”的标识列,它将生成错误,无法更新标识列“ID”。