在 SQL 服务器字符串中将单引号放入单引号
Put single quotes into single quotes in SQL Server string
我有下面的更新查询。
update tableName
set columnName = null
where isnull(columnName, '') = ''
我想在 SQL 服务器字符串生成器查询中添加单引号,以便可以对 table 中的每一列执行上述查询。查看此查询:
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 字符串生成器查询时遇到此错误:
Incorrect syntax near ') = '
我做错了什么?
使用isnull时,必须提供2个参数
' WHERE ISNULL([' + c.name + '], ' + '???' + ') = ' + ''
您需要为 ???目前它是空的
替换为
WHERE ISNULL([' + c.name + '], ' + '''''' + ')
您收到的错误是因为语句字符串无效。你最终得到一个未转义的字符串。
您需要为每个需要的引号 ('''''') 添加转义引号 (''),如下所示:
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
单引号自转义;也就是说,您将两个放在一个文字中以在最终字符串中得到一个。
此外,您希望 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)
我有下面的更新查询。
update tableName
set columnName = null
where isnull(columnName, '') = ''
我想在 SQL 服务器字符串生成器查询中添加单引号,以便可以对 table 中的每一列执行上述查询。查看此查询:
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 字符串生成器查询时遇到此错误:
Incorrect syntax near ') = '
我做错了什么?
使用isnull时,必须提供2个参数
' WHERE ISNULL([' + c.name + '], ' + '???' + ') = ' + ''
您需要为 ???目前它是空的
替换为
WHERE ISNULL([' + c.name + '], ' + '''''' + ')
您收到的错误是因为语句字符串无效。你最终得到一个未转义的字符串。
您需要为每个需要的引号 ('''''') 添加转义引号 (''),如下所示:
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
单引号自转义;也就是说,您将两个放在一个文字中以在最终字符串中得到一个。
此外,您希望 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)