PHP8.1.21版本已发布
vue8.1.21版本已发布
jquery8.1.21版本已发布

Sql server 数据库中,纯SQL语句查询、执行 单引号问题。

原创
2016-06-07 15:42:19 869浏览

在默认情况下, select 'abc',Titile from tb_Name; ---输出内容 是abc; 如果想输出 单引号 'abc,需要使用select '''abc',Titile from tb_Name; ---这里用三个单引号'''abc; select '''abc''',Title from tbName; 输出内容是'abc';两边带有单引号; 谨记

在默认值情况下,

select 'abc',Titile from tb_Name; ---输出内容 是abc;

如果想输出 单引号 'abc,需要使用select '''abc',Titile from tb_Name; ---这里用三个单引号'''abc;

select '''abc''',Title from tbName; 输出内容是'abc';两边带有单引号;

谨记:如果字符串包含单引号,则需要在单引号前再增加一个单引号。

exec('select * from tbName') Sql语句两边有单引号'可以执行,没有时exec(select * from tbName)不能执行。

set @name='Name';
select @name from A123 ; --1
select Name from A123; --2
exec('select '+ @name+' from A123'); --3
exec('select '+ 'Name'+' from A123'); --4

在连接纯字符串中,'+' 单引号加号单引号 可以加在任何位置,这条规律方便引入变量的加入。exec('select '+ 'Name'+' from A123'); 可将'+'删除,变成exec('select Name from A123');或者exec('select'+' Name from A123'); 效果一样,无本质区别。

以上四句执行语句中,2、3、4句执行结果是相同的,均等同于第2句;1执行语句等同于select 'Name' from A123;

三种情况:声明的变量、常量、列名。

第一步,先声明变量, exec('update '+ @tbName+' set Name=''' + @tbName + '''')

第二步,在 ''+ 或者 +'' 中插入常量exec('update '+ @tbName+' set Name=''Mirror' + @tbName + 'Mirror''')

第三步,加入列名,,在变量旁边 +'''' 或者 ''''+ 位置处 修改为 +'''+Name' 或者 'Name+'''+。 原始数据 exec('update '+ @tbName+' set Name=Name+'''+@tbName+'''+Name');

exec('update '+ @tbName+' set Name=''Mirror''+Name+'''+@tbName+'''+Name')。

go
declare @tbName varchar(100)
declare Curb cursor for
    select name from sys.tables
    open Curb
        fetch next from Curb into @tbName
        while @@fetch_status=0
        begin
            --exec('update '+ @tbName+' set Name=Name+'''+@tbName+'''') --1
            --exec('update '+ @tbName+' set Name='''+@tbName+'''+Name') --2  列的名称需要修改,修改该哪一个列? 修改两个Name值即可。
            --exec('update '+ @tbName+' set Name='''+@tbName+'Mirror''+Name') --3   --变量加常量加列名
            --exec('update '+ @tbName+' set Name=''Mirror''')
              exec('update '+ @tbName+' set Name=''Mirror'+@tbName+'''+Name')    --4  --常量加变量加列名
              exec('update '+ @tbName+' set Name='''+'Mirror'+@tbName+'''+Name') --5   --常量加变量加列名
            --exec('update '+ @tbName+' set Name=''' + @tbName + '''')  --
            --exec('update '+ @tbName+' set Name=Name')                 --7
            --exec('update '+ @tbName+' set Name=''Mirror''+Name+'''+@tbName+'''+Name') --8  常量加列名加变量加列名
            --exec('update '+ @tbName+' set Name=''Mirror''+Name')   --9 常量加列名
            fetch next from Curb into @tbName
        end
     close Curb
deallocate Curb

从第2行实现第五行代码,首先在加号附近加上 ' 字符串内容 '+ OR +' 字符串内容 ' 。

根据第4、5行,在字符串中加入 '+' 对代码无影响,可以将其删除。

以上代码实现的功能,遍历数据库中的所有表,并依次在每一个表中执行更改语句,比如 --1中 将表中Name字段的内容加上表名。
如何在exec语句中加单引号?

写出原始语句 update @tbName set Name = Name + @tbName

首先首尾加单引号;声明的变量前面加 '+,后面加 +';最后看赋值部分,需要使用单引号包围声明的变量,需要使用两个单引号。

根据表名来输出"执行每个表的SQL语句"

USE db_Test;  --修改数据库名称 
SELECT  
    'update' + name + ' set Title = ''' + name + '''+Title'  as sql  --name获取的是数据库中所有表的名称;--表名称+Title  --修改Title(列名称)
from
    sys.tables;

USE db_Test;  --修改数据库名称 
SELECT  
    'update ' + name + ' set Title = ''' + name + '''+Title+''abc'''
from
    sys.tables;

USE db_Test;  --修改数据库名称 
SELECT  
    'update ' + name + ' set Title = ''abc' + name + '''+Title+''abc'''   --Title是表中Title列中的内容,
from
    sys.tables;

USE db_Test;
declare @result varchar(255)
set @result = '';
SELECT  
    @result='UPDATE ' + name + ' SET name = ''' + name + '''+name'
from
    sys.tables;
exec(@result)   --只能执行一句  只能更改一个表。


声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。