是否有一种快速方法可以将表中的所有字段更改为空,以仅填充空字段。我有很多列,所以想知道是否有办法通过表而不是按列来完成。在表中将所有列设置为`null`
我需要这样的东西
update table 1
set * = ''
where * is null
,但显然这是不正确的语法
是否有一种快速方法可以将表中的所有字段更改为空,以仅填充空字段。我有很多列,所以想知道是否有办法通过表而不是按列来完成。在表中将所有列设置为`null`
我需要这样的东西
update table 1
set * = ''
where * is null
,但显然这是不正确的语法
此代码将生成更新语句列表中,你必须只运行它:
SELECT 'update '+ so.name+' set '+sc.name+'= '''' where '+sc.name+' is null '
FROM sysobjects so
JOIN syscolumns sc ON so.id = sc.id
JOIN systypes st ON sc.xtype=st.xtype
where so.type = 'U'
and st.name in('varchar','char')
--and so.name = 'tab' <--- if you need update only one table
Here (sql fiddle)你可以看到它是如何工作的。
如果你想生成一个脚本,将更新所有包含空值到空白可为空字段,你可以使用以下代码:
DECLARE @TAB VARCHAR(1000) = 'ProductVendor',
@COL VARCHAR(1000),
@SQL VARCHAR(MAX)
DECLARE UPDATE_CURSOR CURSOR LOCAL FAST_FORWARD FOR
SELECT t2.NAME
FROM (SELECT *
FROM SYSOBJECTS
WHERE XTYPE = 'u'
AND NAME = @TAB)T1
INNER JOIN SYSCOLUMNS t2
ON T1.ID = t2.ID
WHERE t2.ISNULLABLE = 1
OPEN UPDATE_CURSOR
SET @SQL = 'UPDATE ' + @TAB + ' SET '
FETCH NEXT FROM UPDATE_CURSOR INTO @COL
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = @SQL + @COL + ' = Isnull(' + @COL + ', ''''),'
FETCH NEXT FROM UPDATE_CURSOR INTO @COL
END
CLOSE UPDATE_CURSOR
DEALLOCATE UPDATE_CURSOR
SET @SQL = LEFT(@SQL, Len(@SQL) - 1)
EXEC (@SQL)
所有您需要做的就是在开始时更改表名(TAB变量)。 该脚本生成一个查询,该查询将更新一次运行中的所有列。
虽然我有很多领域。我不想一个接一个去做 – user1296762
更新了答案。您可以根据需要添加任意数量的字段。希望这可以帮助。 – Gidil
我认为这是唯一的方法。这将需要很长时间,这就是为什么我想要一个快速解决方案来做整个表 – user1296762
试试这个请
update table1 set columnnames='' where columnnames ='null'
虽然我有很多领域。我不想一个接一个的去做 – user1296762
如果你有很多字段给出字段名后用逗号隔开 – SRIRAM
尝试这样:
UPDATE TABLE1
SET (COL1, COL2, COL3, COL4) = (SELECT COL1A,
COL2A,
COL3A,
COL4A
FROM TABLE2
WHERE COL5A = TABLE1.COL5)
WHERE COL5 IN (SELECT COL5A
FROM TABLE2)
你能告诉我们你的方案为好,即是什么栏目?或者粗略地说:你有10列还是100列?这可能会影响应该选择哪种解决方案。 – jsalonen
更像100。 – user1296762
我得问清楚:你为什么有那么多列?通常当你有很多列时,它表明你的模式有问题。如果是这种情况,您应该修复模式问题。 – jsalonen