下面有更新查询。
update tableName
set columnName = null
where isnull(columnName, '') = ''
我希望将单引号放在Server字符串生成器查询中,以便对表中的每一列执行上述查询。请参见以下查询:
Declare @sql2 varchar(max) = ''
declare @tablename2 as varchar(255) = 'test2'
select @sql2 = @sql2 + 'update [' + @tablename2 + '] set [' + c.name +']' + ' = NULL ' +
' WHERE ISNULL([' + c.name + '], ' + '' + ') = ' + ''
from sys.columns c
inner join sys.tables t on c.object_id = t.object_id
where t.name = @tablename2
EXEC (@sql2)
go
下面是测试数据。
create table test2
(
test varchar(50)
)
insert into test2
values (' ewewwe'), ('sdsddsds '), ('')
在执行SQL字符串生成器查询时,我得到了此错误:
不正确的语法靠近') =‘
我做错了什么?
发布于 2020-01-13 14:39:43
您收到的错误是因为语句字符串无效。最后你会得到一条未转义的字符串。
您需要为所需的每个引号添加一个转义引号(‘),如下所示:
Declare @sql2 varchar(max) =''
declare @tablename2 as varchar(255) ='test2'
select @sql2 = @sql2 + 'update [' + @tablename2 + '] set [' + c.name + ']' + ' = NULL ' +
' WHERE ISNULL([' + c.name + '], ' + '''''' + ') = ' + ''''''
from sys.columns c
inner join sys.tables t on c.object_id = t.object_id
where t.name = @tablename2
EXEC (@sql2)
go
发布于 2020-01-13 14:38:51
使用isnull时,必须提供2个参数。
' WHERE ISNULL([' + c.name + '], ' + '???' + ') = ' + ''
你需要提供一些东西给?现在它是空的
代之以
WHERE ISNULL([' + c.name + '], ' + '''''' + ')
发布于 2020-01-13 14:48:19
单引号是自转义的;也就是说,将两个单引号放在一个文字中以得到最后字符串中的一个。
此外,您希望QUOTENAME()
函数处理这些字段。它足够聪明,还可以说明名称可能包括大括号或其他奇怪之处,此外,如果在语言中添加了可能会干扰的其他内容,您还可以期待它得到更新:
DECLARE @sql2 varchar(max) = ''
DECLARE @tablename2 as varchar(255) = 'test2'
SELECT @sql2 = @sql2 +
'update ' + QUOTENAME(@tablename2) +
' set ' + QUOTENAME(c.name) + ' = NULL' +
' WHERE COALESCE(RTRIM(' + QUOTENAME(c.name) + '), '''') = '''' '
FROM sys.columns c
INNER JOIN sys.tables t on c.object_id = t.object_id
WHERE t.name = @tablename2
EXEC(@sql2)
https://stackoverflow.com/questions/59718601
复制相似问题