发布
社区首页 >问答首页 >将单引号放入Server字符串中的单引号中

将单引号放入Server字符串中的单引号中
EN

Stack Overflow用户
提问于 2020-01-13 14:28:49
回答 3查看 1.2K关注 0票数 0

下面有更新查询。

代码语言:javascript
代码运行次数:0
复制
update tableName 
set columnName = null 
where isnull(columnName, '') = ''

我希望将单引号放在Server字符串生成器查询中,以便对表中的每一列执行上述查询。请参见以下查询:

代码语言:javascript
代码运行次数:0
复制
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

下面是测试数据。

代码语言:javascript
代码运行次数:0
复制
create table test2 
(
    test varchar(50)
)

insert into test2 
values (' ewewwe'), ('sdsddsds '), ('')

在执行SQL字符串生成器查询时,我得到了此错误:

不正确的语法靠近') =‘

我做错了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-01-13 14:39:43

您收到的错误是因为语句字符串无效。最后你会得到一条未转义的字符串。

您需要为所需的每个引号添加一个转义引号(‘),如下所示:

代码语言:javascript
代码运行次数:0
复制
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 
票数 1
EN

Stack Overflow用户

发布于 2020-01-13 14:38:51

使用isnull时,必须提供2个参数。

代码语言:javascript
代码运行次数:0
复制
' WHERE ISNULL([' + c.name + '], ' + '???' + ') = ' + ''

你需要提供一些东西给?现在它是空的

代之以

代码语言:javascript
代码运行次数:0
复制
WHERE ISNULL([' + c.name + '], ' + '''''' + ') 
票数 1
EN

Stack Overflow用户

发布于 2020-01-13 14:48:19

单引号是自转义的;也就是说,将两个单引号放在一个文字中以得到最后字符串中的一个。

此外,您希望QUOTENAME()函数处理这些字段。它足够聪明,还可以说明名称可能包括大括号或其他奇怪之处,此外,如果在语言中添加了可能会干扰的其他内容,您还可以期待它得到更新:

代码语言:javascript
代码运行次数:0
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59718601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档