精华内容
下载资源
问答
  • 高考语文扩展语句压缩语段课件,扩展语句压缩语段技巧.ppt
  • MYSQL经典语句大全——技巧篇黄舟2016-12-20 16:37:15原创5131、1=1,1=2的使用,在SQL语句组合时用的较多“where 1=1” 是表示选择全部 “where 1=2”全部不选,如:if @strWhere !=''beginset @strSQL = 'select ...

    MYSQL经典语句大全——技巧篇

    2e77025c37aad64182a3ee25c67dcd40.png黄舟2016-12-20 16:37:15原创5131、1=1,1=2的使用,在SQL语句组合时用的较多

    “where 1=1” 是表示选择全部 “where 1=2”全部不选,

    如:if @strWhere !=''

    begin

    set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere

    end

    else

    begin

    set @strSQL = 'select count(*) as Total from [' + @tblName + ']'

    end

    我们可以直接写成

    错误!未找到目录项。

    set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere 2、收缩数据库

    --重建索引

    DBCC REINDEX

    DBCC INDEXDEFRAG

    --收缩数据和日志

    DBCC SHRINKDB

    DBCC SHRINKFILE

    3、压缩数据库

    dbcc shrinkdatabase(dbname)

    4、转移数据库给新用户以已存在用户权限

    exec sp_change_users_login 'update_one','newname','oldname'

    go

    5、检查备份集

    RESTORE VERIFYONLY from disk='E:\dvbbs.bak'

    6、修复数据库

    ALTER DATABASE [dvbbs] SET SINGLE_USER

    GO

    DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK

    GO

    ALTER DATABASE [dvbbs] SET MULTI_USER

    GO

    7、日志清除

    SET NOCOUNT ON

    DECLARE @LogicalFileName sysname,

    @MaxMinutes INT,

    @NewSize INT

    USE tablename -- 要操作的数据库名

    SELECT @LogicalFileName = 'tablename_log', -- 日志文件名

    @MaxMinutes = 10, -- Limit on time allowed to wrap log.

    @NewSize = 1 -- 你想设定的日志文件的大小(M)

    Setup / initialize

    DECLARE @OriginalSize int

    SELECT @OriginalSize = size

    FROM sysfiles

    WHERE name = @LogicalFileName

    SELECT 'Original Size of ' + db_name() + ' LOG is ' +

    CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +

    CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'

    FROM sysfiles WHERE name = @LogicalFileName

    CREATE TABLE DummyTrans

    (DummyColumn char (8000) not null)

    DECLARE @Counter INT,

    @StartTime DATETIME,

    @TruncLog VARCHAR(255)

    SELECT @StartTime = GETDATE(),

    @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'

    DBCC SHRINKFILE (@LogicalFileName, @NewSize)

    EXEC (@TruncLog)

    -- Wrap the log if necessary.

    WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired

    AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)

    AND (@OriginalSize * 8 /1024) > @NewSize

    BEGIN -- Outer loop.

    SELECT @Counter = 0

    WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))

    BEGIN -- update

    INSERT DummyTrans VALUES ('Fill Log') DELETE DummyTrans

    SELECT @Counter = @Counter + 1

    END

    EXEC (@TruncLog)

    END

    SELECT 'Final Size of ' + db_name() + ' LOG is ' +

    CONVERT(VARCHAR(30),size) + ' 8K pages or ' +

    CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'

    FROM sysfiles WHERE name = @LogicalFileName

    DROP TABLE DummyTrans

    SET NOCOUNT OFF

    8、说明:更改某个表

    exec sp_changeobjectowner 'tablename','dbo'

    9、存储更改全部表

    CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch

    @OldOwner as NVARCHAR(128),

    @NewOwner as NVARCHAR(128)

    AS

    DECLARE @Name as NVARCHAR(128)

    DECLARE @Owner as NVARCHAR(128)

    DECLARE @OwnerName as NVARCHAR(128)

    DECLARE curObject CURSOR FOR

    select 'Name' = name,'Owner' = user_name(uid) from sysobjects where user_name(uid)=@OldOwner order by name

    OPEN curObject

    FETCH NEXT FROM curObject INTO @Name, @Owner

    WHILE(@@FETCH_STATUS=0)

    BEGIN

    if @Owner=@OldOwner

    begin

    set @OwnerName = @OldOwner + '.' + rtrim(@Name)

    exec sp_changeobjectowner @OwnerName, @NewOwner

    end

    -- select @name,@NewOwner,@OldOwner

    FETCH NEXT FROM curObject INTO @Name, @Owner

    END

    close curObject

    deallocate curObject

    GO

    10、SQL SERVER中直接循环写入数据

    declare @i int

    set @i=1

    while @i<30

    begin

    insert into test (userid) values(@i) set @i=@i+1

    end

    案例:

    有如下表,要求就裱中所有沒有及格的成績,在每次增長0.1的基礎上,使他們剛好及格:

    Name score

    Zhangshan 80

    Lishi 59

    Wangwu 50

    Songquan 69

    while((select min(score) from tb_table)<60)

    begin

    update tb_table set score =score*1.01

    where score<60

    if (select min(score) from tb_table)>60

    break

    else

    continue

    end

    以上就是MYSQL经典语句大全——技巧篇的内容,更多相关内容请关注PHP中文网(www.php.cn)!

    本文原创发布php中文网,转载请注明出处,感谢您的尊重!

    点击阅读全文

    展开全文
  • 最近整理资料,发现很多 pdf 文档,占用了不少的存储空间,考虑使用 7-zip 进行压缩存储,由于文件比较多,且分散在不同目录下,一个个文件压缩比较繁琐。为了提高效率且,方便后面取用,所有打算捣鼓个批处理文件,...


    最近整理资料,发现很多 pdf 文档,占用了不少的存储空间,考虑使用 7-zip 进行压缩存储,由于文件比较多,且分散在不同目录下,一个个文件压缩比较繁琐。为了提高效率且,方便后面取用,所有打算捣鼓个批处理文件,来实现命令行调用 7-zip 来对目录下的每个文档进行单独打包,并将打包后的压缩包存到指定的目录下,详细内容见下文。

    本文在 Windows10 64位 操作系统下,使用的命令行提示符(cmd)版本为 10.0.17134.7067-zip64位 16.04 版本,使用下面脚本时请确保安装了 7-zip ,可在此处下载最新版


    for 命令实现

    以下展示几种通过 for 命令来遍历打包压缩批处理文件的示例:

    @echo off
    :: 切换当前编码方式为 UTF-8,处理命令行窗口标题乱码问题
    chcp 65001
    title 批量压缩当前目录下个文件到各自压缩包
    :: 切换回默认 GBK 编码,处理命令行输出乱码问题
    chcp 936
    echo ---------- START -------------
    
    :: 实现一:遍历当前目录下(不含子目录)的pdf文件, 压缩成与当前文件同名的 7z 格式文件, 最后压缩文件存放在当前目录下新建的 7z 文件夹(可自定义,特换自己想要的文件夹名称)下
    :: for %%F in (*.pdf) do (echo "%%~nF" && "C:\Program Files\7-Zip\7z.exe" a -t7z ".\7z\%%~nF.7z" "%%F" )
    
    :: 实现二:遍历当前目录下(不含子目录)的文件夹进行压缩, 压缩成与当前文件夹同名的 7z 格式文件 , 最后压缩文件存放在目录下新建的 7z 文件夹(可自定义,特换自己想要的文件夹名称)下(如想以目录形式打包,可以参考此方式)
    :: for /d %%F in (*) do (echo "%%~nF" && "C:\Program Files\7-Zip\7z.exe" a -t7z ".\7z\%%~nF.7z" "%%F" )
    
    :: 实现三:遍历当前目录下(含子目录)的pdf文件进行压缩, 压缩成与当前文件同名的 7z 格式文件 , 最后压缩文件存放在目录下新建的 7z 文件夹(可自定义,特换自己想要的文件夹名称)下
    :: for /r %%F in (*.pdf) do (echo "%%~nF" && "C:\Program Files\7-Zip\7z.exe" a -t7z ".\7z\%%~nF.7z" "%%F" )
    
    :: 实现四:遍历当前目录下(含子目录)的pdf文件进行压缩, 压缩成与当前文件同名的 7z 格式文件 , 最后压缩文件存放在与当前文件同目录下
    :: for /r %%F in (*.pdf) do (echo "%%~nF" && "C:\Program Files\7-Zip\7z.exe" a -t7z "%%~dpnF.7z" "%%F" )
    
    :: 实现五:遍历当前目录下(含子目录)的pdf文件进行压缩, 打包到 PDF.7z 压缩包内 , 最后压缩文件存放在当前目录下
    ::for /r %%F in (*.pdf) do (echo "%%~nF" && 7z a -t7z "PDF.7z" "%%F" )
    
    echo ----------  END  -------------
    pause
    

    以上展示了几种处理方式,更多方式自行扩展,如:

    • 上述示例均已 .pdf 类型为例,如果想压缩其他类型文件,可以更换 *.pdf 为对应的 *.类型 (如, *.doc ),其他通配符自行尝试;
    • 如想将文件压缩为 zip 格式,则替换命令中的 -t7z ".\7z\%%~nF.7z" 替换成 -tzip ".\7z\%%~nF.zip"
    • 如想改变压缩算法或比例等,参考下文 7z 的相关命令,进行尝试;

    使用方法

    1. 复制以上代码内容到新建的文本文档内;(可以在此处下载脚本文件
    2. 确定要使用哪种实现来批量打包自己的文件,则删除对应实现下 for 命令前的双英文冒号(::,此符号等效于 rem 命令,是批处理文件的注释标识符,双英文冒号后面的内容是注释说明,不会被当做代码执行 ),并保存;
    3. 修改该新建文本文档的扩展名 .txt 改为 .bat,文件名自行定义;
    4. 将文件拷到要使用的目录下,双击运行(切记不要管理员模式运行)。

    使用上述代码需要特别注意:

    • 当前 for 命令实现版本,不要使用管理员方式运行!不要使用管理员方式运行!不要使用管理员方式运行!重要的事情说三遍!管理员方式运行,会在 System32 目录下生效(因管理员模式运行时,会调用 System32 目录下的 cmd 命令提示符来执行脚本) ,切记!
    • 代码中的 C:\Program Files\7-Zip\7z.exe 是本人电脑上安装的路径,注意安装了 7-zip ,并修改为自己电脑上的路径,否则无法使用,如果将 7z 安装路径配置到环境变量 path 中,则可以将此处的路径替换为 7z.exe(或 7z

    批处理 for 命令说明

    for 命令可以对一组文件中的每个文件进行指定的操作,命令语法如下:

    FOR %variable IN (set) DO command [command-parameters]
    

    cmd 命令行下使用命令 for /? 可以看到 for 相关的解释说明:

    对一组文件中的每一个文件执行某个特定命令。
    
    FOR %variable IN (set) DO command [command-parameters]
    
      %variable  指定一个单一字母可替换的参数。
      (set)      指定一个或一组文件。可以使用通配符。
      command    指定对每个文件执行的命令。
      command-parameters
                 为特定命令指定参数或命令行开关。
    
    在批处理程序中使用 FOR 命令时,指定变量请使用 %%variable 而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.
    
    如果启用命令扩展,则会支持下列 FOR 命令的其他格式:
    	FOR /D %variable IN (set) DO command [command-parameters]
    
    如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。
    	FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
    
            检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句。
            如果在 /R 后没有指定目录规范,则使用当前目录。如果集仅为一个单点(.)字符,
            则枚举该目录树。
    
    	FOR /L %variable IN (start,step,end) DO command [command-parameters]
    
        	该集表示以增量形式从开始到结束的一个数字序列。因此,(1,1,5)将产生序列 1 2 3 4 5,(5,-1,1)将产生序列(5 4 3 2 1)
    
        FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
        FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
        FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
    
            或者,如果有 usebackq 选项:
    
        FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
        FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
        FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
    
            fileset 为一个或多个文件名。继续到 fileset 中的下一个文件之前,
            每份文件都被打开、读取并经过处理。处理包括读取文件,将其分成一行行的文字,
            然后将每行解析成零或更多的符号。然后用已找到的符号字符串变量值调用 For 循环。
            以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白行。
            你可通过指定可选 "options" 参数替代默认解析操作。这个带引号的字符串包括一个
            或多个指定不同解析选项的关键字。这些关键字为:
    
                eol=c           - 指一个行注释字符的结尾(就一个)
                skip=n          - 指在文件开始时忽略的行数。
                delims=xxx      - 指分隔符集。这个替换了空格和制表符的
                                  默认分隔符集。
                tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代
                                  的 for 本身。这会导致额外变量名称的分配。m-n
                                  格式为一个范围。通过 nth 符号指定 mth。如果
                                  符号字符串中的最后一个字符星号,
                                  那么额外的变量将在最后一个符号解析之后
                                  分配并接受行的保留文本。
                usebackq        - 指定新语法已在下类情况中使用:
                                  在作为命令执行一个后引号的字符串并且一个单
                                  引号字符为文字字符串命令并允许在 file-set
                                  中使用双引号扩起文件名称。
    
    某些范例可能有助:
    
    	FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
    
            会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将
            每行中的第二个和第三个符号传递给 for 函数体,用逗号和/或
            空格分隔符号。请注意,此 for 函数体的语句引用 %i 来
            获得第二个符号,引用 %j 来获得第三个符号,引用 %k
            来获得第三个符号后的所有剩余符号。对于带有空格的文件
            名,你需要用双引号将文件名括起来。为了用这种方式来使
            用双引号,还需要使用 usebackq 选项,否则,双引号会
            被理解成是用作定义某个要分析的字符串的。
    
            %i 在 for 语句中显式声明,%j 和 %k 是通过
            tokens= 选项隐式声明的。可以通过 tokens= 一行
            指定最多 26 个符号,只要不试图声明一个高于字母 "z" 或
            "Z" 的变量。请记住,FOR 变量是单一字母、分大小写和全局的变量;
            而且,不能同时使用超过 52 个。
    
            还可以在相邻字符串上使用 FOR /F 分析逻辑,方法是,
                用单引号将括号之间的 file-set 括起来。这样,该字符
            串会被当作一个文件中的一个单一输入行进行解析。
    
    最后,可以用 FOR /F 命令来分析命令的输出。方法是,将
    括号之间的 file-set 变成一个反括字符串。该字符串会
    被当作命令行,传递到一个子 CMD.EXE,其输出会被捕获到
    内存中,并被当作文件分析。如以下例子所示:
          FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
    
        	会枚举当前环境中的环境变量名称。
    
    
    另外,FOR 变量参照的替换已被增强。你现在可以使用下列
    选项语法:
         %~I          - 删除任何引号("),扩展 %I
         %~fI        - 将 %I 扩展到一个完全合格的路径名
         %~dI        - 仅将 %I 扩展到一个驱动器号
         %~pI        - 仅将 %I 扩展到一个路径
         %~nI        - 仅将 %I 扩展到一个文件名
         %~xI        - 仅将 %I 扩展到一个文件扩展名
         %~sI        - 扩展的路径只含有短名
         %~aI        - 将 %I 扩展到文件的文件属性
         %~tI        - 将 %I 扩展到文件的日期/时间
         %~zI        - 将 %I 扩展到文件的大小
         %~$PATH:I   - 查找列在路径环境变量的目录,并将 %I 扩展
                       到找到的第一个完全合格的名称。如果环境变量名
                       未被定义,或者没有找到文件,此组合键会扩展到
                       空字符串
    
    可以组合修饰符来得到多重结果:
    
         %~dpI       - 仅将 %I 扩展到一个驱动器号和路径
         %~nxI       - 仅将 %I 扩展到一个文件名和扩展名
         %~fsI       - 仅将 %I 扩展到一个带有短名的完整路径名
         %~dp$PATH:I - 搜索列在路径环境变量的目录,并将 %I 扩展
                       到找到的第一个驱动器号和路径。
         %~ftzaI     - 将 %I 扩展到类似输出线路的 DIR
    
    在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法
    用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名比较易读,而且避免与不分大小写的组合键混淆。
    
    

    微软文档说明中语法如下

    for {%%|%}<Variable> in (<Set>) do <Command> [<CommandLineOptions>]
    
    参数描述
    {%%|%}必需。 表示可替换参数。在命令提示符执行 for 命令时使用一个百分号 ( % ), 在命令批处理文件中执行 for 命令时使用双百分号 ( %% ) 。变量区分大小写,且必须使用字母表示,如 %A%B,或 %C
    ()必需。 指定一个或多个文件,目录或文本字符串,或运行该命令的一系列值。 两边需要圆括号。
    必需。 指定要在每个文件、 目录或文本字符串或上中包含的值的范围缩小执行的命令设置
    指定你想要指定命令中使用任何命令行选项。
    /?在命令提示符下显示帮助。

    更多介绍及示例参看此处


    forfiles 命令实现

    以下展示几种通过 forfiles 命令来遍历打包压缩批处理文件的示例:

    @echo off
    :: 切换当前编码方式为 UTF-8,处理命令行窗口标题乱码问题
    chcp 65001
    title 批量压缩当前目录下个文件到各自压缩包
    :: 切换回默认 GBK 编码,处理命令行输出乱码问题
    chcp 936
    echo ---------- START -------------
    
    ::实现一:遍历当前目录下(含子目录)的pdf文件进行压缩, 压缩成与当前文件同名的 7z 格式文件 , 最后压缩文件存放在 7z 目录下
    :: Forfiles /P .\ /s /m *.pdf /c "cmd /c echo @FNAME && 7z a -t7z .\7z\@FNAME.7z @PATH"
    
    ::实现二:遍历当前目录下(含子目录)的pdf文件进行压缩, 压缩成与当前文件同名的 7z 格式文件 , 最后压缩文件存放在与当前文件同目录下
    :: Forfiles /P .\ /s /m *.pdf /c "cmd /c echo @FNAME && 7z a -t7z ./@FNAME.7z @PATH"
    
    ::实现三:遍历当前目录下(不含子目录)的pdf文件进行压缩, 压缩成与当前文件同名的 7z 格式文件 , 最后压缩文件存放在 7z 目录下
    ::Forfiles /P .\ /m *.pdf /c "cmd /c echo @FNAME && 7z a -t7z .\7z\@FNAME.7z @RELPATH"
    
    ::实现四:遍历当前目录下(含子目录)的pdf文件进行压缩, 打包到 PDF.7z 压缩包内 , 最后压缩文件存放在当前目录下
    :: Forfiles /P .\ /s /m *.pdf /c "cmd /c echo @FNAME && 7z a -t7z .\PDF.7z @PATH"
    
    echo ----------  END  -------------
    pause
    

    以上展示了几种 forflies 命令的处理方法,更多扩展使用,自行尝试,使用方法类似之前 for 命令实现的使用方法。可以在此处下载脚本文件

    使用上述代码需要特别注意:

    • forfiles 命令,需要自己给定要处理的目录路径(如,代码中的 D:\work 是我存放 pdf 等文件的目录,替换成自己的目录即可)

    • 给定目录后,可以在任意位置执行该脚本,且可以管理员方式运行。

    • 7-zip 安装路径配置到环境变量 path 中,以方便在 forfilescmd 命令字符串中使用


    批处理 forfiles 命令说明

    forfiles 命令可以对一组文件中的每个文件进行指定的操作,命令语法如下:

    FORFILES [/P pathname] [/M searchmask] [/S] 
    		 [/C command] [/D [+ | -] {yyyy/MM/dd | dd}]
    

    cmd 命令行下使用命令 forfiles /? 可以看到 forfiles 相关的解释说明:

    FORFILES [/P pathname] [/M searchmask] [/S]
             [/C command] [/D [+ | -] {yyyy/MM/dd | dd}]
    
    描述:
        选择一个文件(或一组文件)并在那个文件上
        执行一个命令。这有助于批处理作业。
    
    参数列表:
        /P    pathname      表示开始搜索的路径。默认文件夹是当前工作的
                            目录 (.)。
        /M    searchmask    根据搜索掩码搜索文件。默认搜索掩码是 '*'。
        /S                  指导 forfiles 递归到子目录。像 "DIR /S"。
        /C    command       表示为每个文件执行的命令。命令字符串应该
                            用双引号括起来。
                            
                            默认命令是 "cmd /c echo @file"。下列变量
                            可以用在命令字符串中:
                            
                            @file    - 返回文件名。
                            @fname   - 返回不带扩展名的文件名。
                            @ext     - 只返回文件的扩展名。
                            @path    - 返回文件的完整路径。
                            @relpath - 返回文件的相对路径。
                            @isdir   - 如果文件类型是目录,返回 "TRUE";
                                       如果是文件,返回 "FALSE"。
                            @fsize   - 以字节为单位返回文件大小。
                            @fdate   - 返回文件上一次修改的日期。
                            @ftime   - 返回文件上一次修改的时间。
    
                            要在命令行包括特殊字符,字符请以 0xHH
                            形式使用十六进制代码(例如,0x09 为 tab)。
                            内部 CMD.exe 命令前面应以 "cmd /c" 开始。
    
        /D    date          选择文件,其上一次修改日期大于或等于 (+),
                            或者小于或等于 (-) 用 "yyyy/MM/dd" 格式指定的日期;
    
                            或选择文件,其上一次修改日期大于或等于 (+)
                            当前日期加 "dd" 天,或者小于或等于 (-) 当前
    
                            日期减 "dd" 天。有效的 "dd" 天数可以是
                            0 - 32768 范围内的任何数字。如果没有指定,
    
                            "+" 被当作默认符号。
    
        /?                  显示此帮助消息。
    
    示例:
        FORFILES /?
        FORFILES
        FORFILES /P C:\WINDOWS /S /M DNS*.*
        FORFILES /S /M *.txt /C "cmd /c type @file | more"
        FORFILES /P C:\ /S /M *.bat
        FORFILES /D -30 /M *.exe
                 /C "cmd /c echo @path 0x09 在 30 前就被更改。"
        FORFILES /D 2001/01/01
                 /C "cmd /c echo @fname 在 2001年1月1日就是新的。"
        FORFILES /D +2019/6/14 /C "cmd /c echo @fname 今天是新的。"
        FORFILES /M *.exe /D +1
        FORFILES /S /M *.doc /C "cmd /c echo @fsize"
        FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"
    
    

    微软文档说明中语法如下

    forfiles [/p <Path>] [/m <SearchMask>] [/s] [/c "<Command>"] [/d [{+|-}][{<Date>|<Days>}]]
    
    参数描述
    /p 指定开始搜索的路径。默认情况下,搜索从当前工作目录开始。
    /m 根据指定的搜索掩码搜索文件。默认搜索掩码是 *.\ *
    /s指示forfiles命令以递归方式搜索子目录。
    在每个文件上运行指定的命令。命令字符串包含在双引号中。默认命令是“cmd / c echo @file”。
    /d [{+|-}]⁠[{|}]选择具有指定的时间范围内的上次修改日期的文件。
    - 选择文件的上次修改日期晚于或等于 ( + ) 或早于或等于 ( - ) 指定的日期,其中日期采用格式 MM/DD/YYYY。
    - 选择文件的上次修改日期晚于或等于 ( + ) 的当前日期加上指定,天内或早于或等于 ( - ) 的当前日期减去天数指定。
    有效值范围 0-32,768 中包含任意数量。 如果指定没有登录,则 + 默认情况下使用。
    /?在命令提示符下显示帮助。

    更多介绍及示例参看此处


    关于 7-zip

    7-Zip 是一款拥有极高压缩比的开源压缩软件。支持 Windows、Linux等平台。通常使用 7-Zip.7z 格式能比使用 .zip 格式的压缩档案小 30-70%。并且使用 7-Zip 创建的 .zip 格式比大多数其它压缩软件创建的都小 2-10%。关于 7-zip 等更多内容,可以参看官网说明

    7-zip 安装完成后,在安装目录下,可以找到当前版本 7-zip.chm 帮助文档,中文帮助文档可以在此处下载 ,文档下载后,打开无内容,可以尝试在文档属性中勾选 解除锁定 ,点击应用即可。

    7-zip文档解除锁定

    7-zip 命令行的语法格式大致如下:

    7z <command> [<switch>...] <base_archive_name> [<arguments>...]
    
    7z <命令行> [<选项>...] <基本档案名称> [<参数变量>...]
    

    关于 7-zip 命令行版本的更多内容,在文档中有较为详细的介绍,并附有示例,可以自行学习尝试。

    7-zip 命令行版本用户手册


    DEL 命令删除文件

    最后,附上递归删除指定类型文件批处理代码(可以用来批量删除打包的源文件)

    **特别注意:**此删除为完全删除,回收站不可见,且无法撤销还原,请慎用!!!

    :: 删除目录下(含子目录下)符合条件的文件
    @echo off
    :: 不推荐使用此方法,管理员模式运行时可能会误删 System32 目录下文件,请慎用!!!
    ::for /r %%F in (*.7z) do (DEL /p "%%F" )
    
    :: 推荐使用此方法,支持管理员方式运行(因提供了绝对路径)
    forfiles /P "D:\work" /s /m *.7z /c "cmd /c DEL /p @PATH"
    pause
    

    cmd 命令行下使用命令 DEL /? 可以看到 DEL 相关的解释说明:

    删除一个或数个文件。
    
    DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
    ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
    
      names         指定一个或多个文件或者目录列表。
                    通配符可用来删除多个文件。
                    如果指定了一个目录,该目录中的所
                    有文件都会被删除。
    
      /P            删除每一个文件之前提示确认。
      /F            强制删除只读文件。
      /S            删除所有子目录中的指定的文件。
      /Q            安静模式。删除全局通配符时,不要求确认
      /A            根据属性选择要删除的文件
      属性          R  只读文件                     S  系统文件
                    H  隐藏文件                     A  存档文件
                    I  无内容索引文件               L  重分析点
                    -  表示“否”的前缀
    
    如果命令扩展被启用,DEL 和 ERASE 更改如下:
    
    /S 开关的显示句法会颠倒,即只显示已经
    删除的文件,而不显示找不到的文件。
    

    建议: 使用删除时,DEL 命令后使用 /p 命令参数,来手动确认删除文件,防止误删!


    参考阅读

    微软文档 - Windows Commands

    Computer Hope - Microsoft DOS and Windows command line

    7-zip 中文帮助文档

    展开全文
  • 三、技巧 1、1=1,1=2的使用,在SQL语句组合时用的较多 “where 1=1” 是表示选择全部 “where 1=2”全部不选,如:if @strWhere !=''  begin set @strSQL = 'select count(*) as Total from [' + @tblName + '...

    三、技巧

    1、1=1,1=2的使用,在SQL语句组合时用的较多

    “where 1=1” 是表示选择全部    “where 1=2”全部不选,
    如:
    if @strWhere !='' 
    begin
    set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere 
    end
    else 
    begin
    set @strSQL = 'select count(*) as Total from [' + @tblName + ']' 
    end 

    我们可以直接写成

    错误!未找到目录项。
    set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 安定'+ @strWhere 

    2、收缩数据库
    --重建索引
    DBCC REINDEX
    DBCC INDEXDEFRAG
    --收缩数据和日志
    DBCC SHRINKDB
    DBCC SHRINKFILE

    3、压缩数据库
    dbcc shrinkdatabase(dbname)

    4、转移数据库给新用户以已存在用户权限
    exec sp_change_users_login 'update_one','newname','oldname'
    go

    5、检查备份集
    RESTORE VERIFYONLY from disk='E:\dvbbs.bak'

    6、修复数据库
    ALTER DATABASE [dvbbs] SET SINGLE_USER
    GO
    DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
    GO
    ALTER DATABASE [dvbbs] SET MULTI_USER
    GO

    7、日志清除
    SET NOCOUNT ON
    DECLARE @LogicalFileName sysname,
     @MaxMinutes INT,
     @NewSize INT


    USE tablename -- 要操作的数据库名
    SELECT  @LogicalFileName = 'tablename_log', -- 日志文件名
    @MaxMinutes = 10, -- Limit on time allowed to wrap log.
     @NewSize = 1  -- 你想设定的日志文件的大小(M)

    Setup / initialize
    DECLARE @OriginalSize int
    SELECT @OriginalSize = size 
     FROM sysfiles
     WHERE name = @LogicalFileName
    SELECT 'Original Size of ' + db_name() + ' LOG is ' + 
     CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' + 
     CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
     FROM sysfiles
     WHERE name = @LogicalFileName
    CREATE TABLE DummyTrans
     (DummyColumn char (8000) not null)


    DECLARE @Counter    INT,
     @StartTime DATETIME,
     @TruncLog   VARCHAR(255)
    SELECT @StartTime = GETDATE(),
     @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'

    DBCC SHRINKFILE (@LogicalFileName, @NewSize)
    EXEC (@TruncLog)
    -- Wrap the log if necessary.
    WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
     AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)  
     AND (@OriginalSize * 8 /1024) > @NewSize  
     BEGIN -- Outer loop.
    SELECT @Counter = 0
     WHILE   ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
     BEGIN -- update
     INSERT DummyTrans VALUES ('Fill Log') DELETE DummyTrans
     SELECT @Counter = @Counter + 1
     END
     EXEC (@TruncLog)  
     END
    SELECT 'Final Size of ' + db_name() + ' LOG is ' +
     CONVERT(VARCHAR(30),size) + ' 8K pages or ' + 
     CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
     FROM sysfiles 
     WHERE name = @LogicalFileName
    DROP TABLE DummyTrans
    SET NOCOUNT OFF 

    8、说明:更改某个表
    exec sp_changeobjectowner 'tablename','dbo'

    9、存储更改全部表

    CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch
    @OldOwner as NVARCHAR(128),
    @NewOwner as NVARCHAR(128)
    AS

    DECLARE @Name    as NVARCHAR(128)
    DECLARE @Owner   as NVARCHAR(128)
    DECLARE @OwnerName   as NVARCHAR(128)

    DECLARE curObject CURSOR FOR 
    select 'Name'    = name,
       'Owner'    = user_name(uid)
    from sysobjects
    where user_name(uid)=@OldOwner
    order by name

    OPEN   curObject
    FETCH NEXT FROM curObject INTO @Name, @Owner
    WHILE(@@FETCH_STATUS=0)
    BEGIN     
    if @Owner=@OldOwner 
    begin
       set @OwnerName = @OldOwner + '.' + rtrim(@Name)
       exec sp_changeobjectowner @OwnerName, @NewOwner
    end
    -- select @name,@NewOwner,@OldOwner

    FETCH NEXT FROM curObject INTO @Name, @Owner
    END

    close curObject
    deallocate curObject

    GO


    10、SQL SERVER中直接循环写入数据
    declare @i int
    set @i=1
    while @i<30
    begin

       insert into test (userid) values(@i)
       set @i=@i+1
    end

    案例
    有如下表,要求就裱中所有沒有及格的成績,在每次增長0.1的基礎上,使他們剛好及格:

        Name     score

        Zhangshan    80

        Lishi       59

        Wangwu      50

        Songquan69

    while((selectmin(score) from tb_table)<60)

    begin

    update tb_table set score =score*1.01

    where score<60

    if  (select min(score) from tb_table)>60

      break

     else

        continue

    end

    展开全文
  • Oracle 常用语句大全

    万次阅读 多人点赞 2018-12-13 00:13:10
    9、说明:in 的使用方法 select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’) 10、说明:两张关联表,删除主表中已经在副表中没有的信息 delete from table1 where not exists ( select *...

    一、基础必会篇

    1、说明:创建数据库
    CREATE DATABASE database-name

    2、说明:删除数据库
    drop database dbname

    3、说明:备份 sql server
    — 创建 备份数据的 device
    USE master
    EXEC sp_addumpdevice ‘disk’, ‘testBack’, ‘c:\mssql7backup\MyNwind_1.dat’
    — 开始 备份
    BACKUP DATABASE pubs TO testBack

    4、说明:创建新表
    create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],…)
    根据已有的表创建新表:
    A:select * into table_new from table_old (使用旧表创建新表)
    B:create table tab_new as select col1,col2… from tab_old definition only<仅适用于Oracle>

    5、说明:删除新表
    drop table tabname

    6、说明:增加一个列,删除一个列
    A:alter table tabname add column col type
    B:alter table tabname drop column colname
    注:DB2DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。

    7、说明:添加主键: Alter table tabname add primary key(col)
    说明:删除主键: Alter table tabname drop primary key(col)

    8、说明:创建索引:create [unique] index idxname on tabname(col….)
    删除索引:drop index idxname
    注:索引是不可更改的,想更改必须删除重新建。

    9、说明:创建视图:create view viewname as select statement
    删除视图:drop view viewname

    10、说明:几个简单的基本的sql语句
    选择:select * from table1 where 范围
    插入:insert into table1(field1,field2) values(value1,value2)
    删除:delete from table1 where 范围
    更新:update table1 set field1=value1 where 范围
    查找:select * from table1 where field1 like ’%value1%’ —like的语法很精妙,查资料!
    排序:select * from table1 order by field1,field2 [desc]
    总数:select count as totalcount from table1
    求和:select sum(field1) as sumvalue from table1
    平均:select avg(field1) as avgvalue from table1
    最大:select max(field1) as maxvalue from table1
    最小:select min(field1) as minvalue from table1

    11、说明:几个高级查询运算词
    A: UNION 运算符
    UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
    B: EXCEPT 运算符
    EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
    C: INTERSECT 运算符
    INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
    注:使用运算词的几个查询结果行必须是一致的。

    12、说明:使用外连接
    A、left (outer) join:
    左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
    SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
    B:right (outer) join:
    右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
    C:full/cross (outer) join:
    全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

    13、分组:Group by:
    一张表,一旦分组 完成后,查询后只能得到组相关的信息。
    组相关的信息:(统计信息) count,sum,max,min,avg 分组的标准)
    在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据
    在selecte统计函数中的字段,不能和普通的字段放在一起;

    14、对数据库进行操作:
    分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后接表明,附加需要完整的路径名

    15、如何修改数据库的名称:
    sp_renamedb ‘old_name’, ‘new_name’

    二、提高篇

    1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
    法一:select * into b from a where 1<>1(仅用于SQlServer)
    法二:select top 0 * into b from a

    2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
    insert into b(a, b, c) select d,e,f from b;

    3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
    insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
    例子:…from b in ‘"&Server.MapPath(".")&"\data.mdb" &"’ where…

    4、说明:子查询(表名1:a 表名2:b)
    select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)

    5、说明:显示文章、提交人和最后回复时间
    select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

    6、说明:外连接查询(表名1:a 表名2:b)
    select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

    7、说明:在线视图查询(表名1:a )
    select * from (SELECT a,b,c FROM a) T where t.a > 1;

    8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
    select * from table1 where time between time1 and time2
    select a,b,c, from table1 where a not between 数值1 and 数值2

    9、说明:in 的使用方法
    select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

    10、说明:两张关联表,删除主表中已经在副表中没有的信息
    delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

    11、说明:四表联查问题:
    select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where …

    12、说明:日程安排提前五分钟提醒
    SQL: select * from 日程安排 where datediff(‘minute’,f开始时间,getdate())>5

    13、说明:一条sql 语句搞定数据库分页
    select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
    具体实现:
    关于数据库分页:

    declare @start int,@end int
    @sql nvarchar(600)
    set @sql=’select top’+str(@end-@start+1)+’+from T where rid not in(select top’+str(@str-1)+’Rid from T where Rid>-1)’
    exec sp_executesql @sql

    注意:在top后不能直接跟一个变量,所以在实际应用中只有这样的进行特殊的处理。Rid为一个标识列,如果top后还有具体的字段,这样做是非常有好处的。因为这样可以避免 top的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引则首先查询索引)

    14、说明:前10条记录
    select top 10 * form table1 where 范围

    15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
    select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

    16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
    (select a from tableA ) except (select a from tableB) except (select a from tableC)

    17、说明:随机取出10条数据
    select top 10 * from tablename order by newid()

    18、说明:随机选择记录
    select newid()

    19、说明:删除重复记录
    (1),delete from tablename where id not in (select max(id) from tablename group by col1,col2,…)
    (2),select distinct * into temp from tablename
    delete from tablename
    insert into tablename select * from temp
    评价: 这种操作牵连大量的数据的移动,这种做法不适合大容量但数据操作
    (3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段

    alter table tablename
    –添加一个自增列
    add column_b int identity(1,1)
    delete from tablename where column_b not in(
    select max(column_b) from tablename group by column1,column2,…)
    alter table tablename drop column column_b

    20、说明:列出数据库里所有的表名
    select name from sysobjects where type=‘U’ // U代表用户

    21、说明:列出表里的所有的列名
    select name from syscolumns where id=object_id(‘TableName’)

    22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
    select type,sum(case vender when ‘A’ then pcs else 0 end),sum(case vender when ‘C’ then pcs else 0 end),sum(case vender when ‘B’ then pcs else 0 end) FROM tablename group by type
    显示结果:
    type vender pcs
    电脑 A 1
    电脑 A 1
    光盘 B 2
    光盘 A 2
    手机 B 3
    手机 C 3

    23、说明:初始化表table1
    TRUNCATE TABLE table1

    24、说明:选择从10到15的记录
    select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc

    三、技巧篇

    1、1=1,1=2 的使用,在SQL语句组合时用的较多

    “where 1=1” 是表示选择全部 “where 1=2” 全部不选,
    如:
    if @strWhere !=’’
    begin
    set @strSQL = ‘select count() as Total from [’ + @tblName + '] where ’ + @strWhere
    end
    else
    begin
    set @strSQL = 'select count(
    ) as Total from [’ + @tblName + ‘]’
    end

    我们可以直接写成

    错误!未找到目录项。
    set @strSQL = ‘select count(*) as Total from [’ + @tblName + '] where 1=1 安定 '+ @strWhere 2、收缩数据库
    –重建索引
    DBCC REINDEX
    DBCC INDEXDEFRAG
    –收缩数据和日志
    DBCC SHRINKDB
    DBCC SHRINKFILE

    3、压缩数据库
    dbcc shrinkdatabase(dbname)

    4、转移数据库给新用户以已存在用户权限
    exec sp_change_users_login ‘update_one’,‘newname’,‘oldname’
    go

    5、检查备份集
    RESTORE VERIFYONLY from disk=‘E:\dvbbs.bak’

    6、修复数据库
    ALTER DATABASE [dvbbs] SET SINGLE_USER
    GO
    DBCC CHECKDB(‘dvbbs’,repair_allow_data_loss) WITH TABLOCK
    GO
    ALTER DATABASE [dvbbs] SET MULTI_USER
    GO

    7、日志清除
    SET NOCOUNT ON
    DECLARE @LogicalFileName sysname,
    @MaxMinutes INT,
    @NewSize INT

    USE tablename – 要操作的数据库名
    SELECT @LogicalFileName = ‘tablename_log’, – 日志文件名
    @MaxMinutes = 10, – Limit on time allowed to wrap log.
    @NewSize = 1 – 你想设定的日志文件的大小(M)

    Setup / initialize
    DECLARE @OriginalSize int
    SELECT @OriginalSize = size
    FROM sysfiles
    WHERE name = @LogicalFileName
    SELECT 'Original Size of ’ + db_name() + ’ LOG is ’ +
    CONVERT(VARCHAR(30),@OriginalSize) + ’ 8K pages or ’ +
    CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + ‘MB’
    FROM sysfiles
    WHERE name = @LogicalFileName
    CREATE TABLE DummyTrans
    (DummyColumn char (8000) not null)

    DECLARE @Counter INT,
    @StartTime DATETIME,
    @TruncLog VARCHAR(255)
    SELECT @StartTime = GETDATE(),
    @TruncLog = ‘BACKUP LOG ’ + db_name() + ’ WITH TRUNCATE_ONLY’

    DBCC SHRINKFILE (@LogicalFileName, @NewSize)
    EXEC (@TruncLog)
    – Wrap the log if necessary.
    WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) – time has not expired
    AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)
    AND (@OriginalSize * 8 /1024) > @NewSize
    BEGIN – Outer loop.
    SELECT @Counter = 0
    WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
    BEGIN – update
    INSERT DummyTrans VALUES (‘Fill Log’) DELETE DummyTrans
    SELECT @Counter = @Counter + 1
    END
    EXEC (@TruncLog)
    END
    SELECT 'Final Size of ’ + db_name() + ’ LOG is ’ +
    CONVERT(VARCHAR(30),size) + ’ 8K pages or ’ +
    CONVERT(VARCHAR(30),(size*8/1024)) + ‘MB’
    FROM sysfiles
    WHERE name = @LogicalFileName
    DROP TABLE DummyTrans
    SET NOCOUNT OFF

    8、说明:更改某个表
    exec sp_changeobjectowner ‘tablename’,‘dbo’

    9、存储更改全部表

    CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch
    @OldOwner as NVARCHAR(128),
    @NewOwner as NVARCHAR(128)
    AS

    DECLARE @Name as NVARCHAR(128)
    DECLARE @Owner as NVARCHAR(128)
    DECLARE @OwnerName as NVARCHAR(128)

    DECLARE curObject CURSOR FOR
    select ‘Name’ = name,
    ‘Owner’ = user_name(uid)
    from sysobjects
    where user_name(uid)=@OldOwner
    order by name

    OPEN curObject
    FETCH NEXT FROM curObject INTO @Name, @Owner
    WHILE(@@FETCH_STATUS=0)
    BEGIN
    if @Owner=@OldOwner
    begin
    set @OwnerName = @OldOwner + ‘.’ + rtrim(@Name)
    exec sp_changeobjectowner @OwnerName, @NewOwner
    end
    – select @name,@NewOwner,@OldOwner

    FETCH NEXT FROM curObject INTO @Name, @Owner
    END

    close curObject
    deallocate curObject
    GO

    10、SQL SERVER中直接循环写入数据
    declare @i int
    set @i=1
    while @i<30
    begin
    insert into test (userid) values(@i)
    set @i=@i+1
    end
    案例:
    有如下表,要求就裱中所有沒有及格的成績,在每次增長0.1的基礎上,使他們剛好及格:

    Name ---- score -----
    Zhangshan 80
    Lisi 59
    Wangwu 50
    Songquan 69

    while((select min(score) from tb_table)<60)
    begin
    update tb_table set score =score*1.01
    where score<60
    if (select min(score) from tb_table)>60
    break
    else
    continue
    end

    常见数据库开发 - 经典

    1.按姓氏笔画排序:
    Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as //从少到多

    2.数据库加密:
    select encrypt(‘原始密码’)
    select pwdencrypt(‘原始密码’)
    select pwdcompare(‘原始密码’,‘加密后密码’) = 1–相同;否则不相同 encrypt(‘原始密码’)
    select pwdencrypt(‘原始密码’)
    select pwdcompare(‘原始密码’,‘加密后密码’) = 1–相同;否则不相同

    3.取回表中字段:
    declare @list varchar(1000),
    @sql nvarchar(1000)
    select @list=@list+’,’+b.name from sysobjects a,syscolumns b where a.id=b.id and a.name=‘表A’
    set @sql=‘select ‘+right(@list,len(@list)-1)+’ from 表A’
    exec (@sql)

    4.查看硬盘分区:
    EXEC master…xp_fixeddrives

    5.比较A,B表是否相等:
    if (select checksum_agg(binary_checksum()) from A)
    =(select checksum_agg(binary_checksum(
    )) from B)
    print ‘相等’
    else
    print ‘不相等’

    6.杀掉所有的事件探察器进程:
    DECLARE hcforeach CURSOR GLOBAL FOR SELECT 'kill ‘+RTRIM(spid) FROM master.dbo.sysprocesses
    WHERE program_name IN(‘SQL profiler’,N’SQL 事件探查器’)
    EXEC sp_msforeach_worker ‘?’

    7.记录搜索:
    开头到N条记录
    Select Top N * From 表

    N到M条记录(要有主索引ID)
    Select Top M-N * From 表 Where ID in (Select Top M ID From 表) Order by ID Desc

    N到结尾记录
    Select Top N * From 表 Order by ID Desc

    案例
    例如1:一张表有一万多条记录,表的第一个字段 RecID 是自增长字段, 写一个SQL语句, 找出表的第31到第40个记录。

    select top 10 recid from A where recid not in(select top 30 recid from A)

    分析:如果这样写会产生某些问题,如果recid在表中存在逻辑索引。

    select top 10 recid from A where……是从索引中查找,而后面的select top 30 recid from A则在数据表中查找,这样由于索引中的顺序有可能和数据表中的不一致,这样就导致查询到的不是本来的欲得到的数据。

    解决方案

    1, 用order by select top 30 recid from A order by ricid 如果该字段不是自增长,就会出现问题

    2, 在那个子查询中也加条件:select top 30 recid from A where recid>-1

    例2:查询表中的最后以条记录,并不知道这个表共有多少数据,以及表结构。
    set @s = ‘select top 1 * from T where pid not in (select top ’ + str(@count-1) + ’ pid from T)’

    print @s exec sp_executesql @s

    9:获取当前数据库中的所有用户表
    select Name from sysobjects where xtype=‘u’ and status>=0

    10:获取某一个表的所有字段
    select name from syscolumns where id=object_id(‘表名’)

    select name from syscolumns where id in (select id from sysobjects where type = ‘u’ and name = ‘表名’)

    两种方式的效果相同

    11:查看与某一个表相关的视图、存储过程、函数
    select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like ‘%表名%’

    12:查看当前数据库中所有存储过程
    select name as 存储过程名称 from sysobjects where xtype=‘P’

    13:查询用户创建的所有数据库
    select * from master…sysdatabases D where sid not in(select sid from master…syslogins where name=‘sa’)
    或者
    select dbid, name AS DB_NAME from master…sysdatabases where sid <> 0x01

    14:查询某一个表的字段和数据类型
    select column_name,data_type from information_schema.columns
    where table_name = ‘表名’

    15:不同服务器数据库之间的数据操作

    –创建链接服务器

    exec sp_addlinkedserver 'ITSV ', ’ ', 'SQLOLEDB ', '远程服务器名或ip地址 ’
    exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 ’

    –查询示例
    select * from ITSV.数据库名.dbo.表名

    –导入示例
    select * into 表 from ITSV.数据库名.dbo.表名

    –以后不再使用时删除链接服务器
    exec sp_dropserver 'ITSV ', 'droplogins ’

    –连接远程/局域网数据(openrowset/openquery/opendatasource)
    –1、openrowset

    –查询示例
    select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

    –生成本地表
    select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

    –把本地表导入远程表
    insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

    select *from 本地表

    –更新本地表
    update b

    set b.列A=a.列A

    from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b

    on a.column1=b.column1

    –openquery用法需要创建一个连接

    –首先创建一个连接创建链接服务器
    exec sp_addlinkedserver 'ITSV ', ’ ', 'SQLOLEDB ', '远程服务器名或ip地址 ’

    –查询
    select * FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')

    –把本地表导入远程表
    insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')

    select * from 本地表

    –更新本地表
    update b

    set b.列B=a.列B

    FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') as a

    inner join 本地表 b on a.列A=b.列A

    –3、opendatasource/openrowset

    SELECT *

    FROM opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ’ ).test.dbo.roy_ta

    –把本地表导入远程表

    insert opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ').数据库.dbo.表名

    select * from 本地表

    SQL Server基本函数

    SQL Server基本函数

    1.字符串函数 长度与分析用

    1,datalength(Char_expr) 返回字符串包含字符数,但不包含后面的空格
    2,substring(expression,start,length) 取子串,字符串的下标是从“1”,start为起始位置,length为字符串长度,实际应用中以len(expression)取得其长度
    3,right(char_expr,int_expr) 返回字符串右边第int_expr个字符,还用left于之相反
    4,isnull( check_expression , replacement_value )如果check_expression為空,則返回replacement_value的值,不為空,就返回check_expression字符操作类

    5,Sp_addtype 自定義數據類型
    例如:EXEC sp_addtype birthday, datetime, ‘NULL’

    6,set nocount {on|off}使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息。如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。SET NOCOUNT 设置是在执行或运行时设置,而不是在分析时设置。SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。
    SET NOCOUNT 为 OFF 时,返回计数

    常识

    在SQL查询中:from后最多可以跟多少张表或视图:256

    在SQL语句中出现 Order by,查询时,先排序,后取

    在SQL中,一个字段的最大容量是8000,而对于nvarchar(4000),由于nvarchar是Unicode码。

    SQLServer 同步复制技术实现步骤

    一、 预备工作

    1.发布服务器,订阅服务器都创建一个同名的windows用户,并设置相同的密码,做为发布快照文件夹的有效访问用户

    –管理工具

    –计算机管理

    –用户和组

    –右键用户

    –新建用户

    –建立一个隶属于administrator组的登陆windows的用户(SynUser)

    2.在发布服务器上,新建一个共享目录,做为发布的快照文件的存放目录,操作:

    我的电脑–D:\ 新建一个目录,名为: PUB

    –右键这个新建的目录

    –属性–共享

    –选择"共享该文件夹"

    –通过"权限"按纽来设置具体的用户权限,保证第一步中创建的用户(SynUser) 具有对该文件夹的所有权限

    –确定

    3.设置SQL代理(SQLSERVERAGENT)服务的启动用户(发布/订阅服务器均做此设置)

    开始–程序–管理工具–服务

    –右键SQLSERVERAGENT

    –属性–登陆–选择"此账户"

    –输入或者选择第一步中创建的windows登录用户名(SynUser)

    –"密码"中输入该用户的密码

    4.设置SQL Server身份验证模式,解决连接时的权限问题(发布/订阅服务器均做此设置)

    企业管理器

    –右键SQL实例–属性

    –安全性–身份验证

    –选择"SQL Server 和 Windows"

    –确定

    5.在发布服务器和订阅服务器上互相注册

    企业管理器

    –右键SQL Server组

    –新建SQL Server注册…

    –下一步–可用的服务器中,输入你要注册的远程服务器名 --添加

    –下一步–连接使用,选择第二个"SQL Server身份验证"

    –下一步–输入用户名和密码(SynUser)

    –下一步–选择SQL Server组,也可以创建一个新组

    –下一步–完成

    6.对于只能用IP,不能用计算机名的,为其注册服务器别名(此步在实施中没用到)

    (在连接端配置,比如,在订阅服务器上配置的话,服务器名称中输入的是发布服务器的IP)

    开始–程序–Microsoft SQL Server–客户端网络实用工具

    –别名–添加

    –网络库选择"tcp/ip"–服务器别名输入SQL服务器名

    –连接参数–服务器名称中输入SQL服务器ip地址

    –如果你修改了SQL的端口,取消选择"动态决定端口",并输入对应的端口号

    二、 正式配置

    1、配置发布服务器

    打开企业管理器,在发布服务器(B、C、D)上执行以下步骤:

    (1) 从[工具]下拉菜单的[复制]子菜单中选择[配置发布、订阅服务器和分发]出现配置发布和分发向导

    (2) [下一步] 选择分发服务器 可以选择把发布服务器自己作为分发服务器或者其他sql的服务器(选择自己)

    (3) [下一步] 设置快照文件夹

    采用默认\servername\Pub

    (4) [下一步] 自定义配置

    可以选择:是,让我设置分发数据库属性启用发布服务器或设置发布设置

    否,使用下列默认设置(推荐)

    (5) [下一步] 设置分发数据库名称和位置 采用默认值

    (6) [下一步] 启用发布服务器 选择作为发布的服务器

    (7) [下一步] 选择需要发布的数据库和发布类型

    (8) [下一步] 选择注册订阅服务器

    (9) [下一步] 完成配置

    2、创建出版物

    发布服务器B、C、D上

    (1)从[工具]菜单的[复制]子菜单中选择[创建和管理发布]命令

    (2)选择要创建出版物的数据库,然后单击[创建发布]

    (3)在[创建发布向导]的提示对话框中单击[下一步]系统就会弹出一个对话框。对话框上的内容是复制的三个类型。我们现在选第一个也就是默认的快照发布(其他两个大家可以去看看帮助)

    (4)单击[下一步]系统要求指定可以订阅该发布的数据库服务器类型,SQLSERVER允许在不同的数据库如 orACLE或ACCESS之间进行数据复制。

    但是在这里我们选择运行"SQL SERVER 2000"的数据库服务器

    (5)单击[下一步]系统就弹出一个定义文章的对话框也就是选择要出版的表

    注意: 如果前面选择了事务发布 则再这一步中只能选择带有主键的表

    (6)选择发布名称和描述

    (7)自定义发布属性 向导提供的选择:

    是 我将自定义数据筛选,启用匿名订阅和或其他自定义属性

    否 根据指定方式创建发布 (建议采用自定义的方式)

    (8)[下一步] 选择筛选发布的方式

    (9)[下一步] 可以选择是否允许匿名订阅

    1)如果选择署名订阅,则需要在发布服务器上添加订阅服务器

    方法: [工具]->[复制]->[配置发布、订阅服务器和分发的属性]->[订阅服务器] 中添加

    否则在订阅服务器上请求订阅时会出现的提示:改发布不允许匿名订阅

    如果仍然需要匿名订阅则用以下解决办法

    [企业管理器]->[复制]->[发布内容]->[属性]->[订阅选项] 选择允许匿名请求订阅

    2)如果选择匿名订阅,则配置订阅服务器时不会出现以上提示

    (10)[下一步] 设置快照 代理程序调度

    (11)[下一步] 完成配置

    当完成出版物的创建后创建出版物的数据库也就变成了一个共享数据库

    有数据

    srv1.库名…author有字段:id,name,phone,

    srv2.库名…author有字段:id,name,telphone,adress

    要求:

    srv1.库名…author增加记录则srv1.库名…author记录增加

    srv1.库名…author的phone字段更新,则srv1.库名…author对应字段telphone更新

    –*/

    –大致的处理步骤

    –1.在 srv1 上创建连接服务器,以便在 srv1 中操作 srv2,实现同步

    exec sp_addlinkedserver ‘srv2’,’’,‘SQLOLEDB’,‘srv2的sql实例名或ip’

    exec sp_addlinkedsrvlogin ‘srv2’,‘false’,null,‘用户名’,‘密码’

    go

    –2.在 srv1 和 srv2 这两台电脑中,启动 msdtc(分布式事务处理服务),并且设置为自动启动。

    我的电脑–控制面板–管理工具–服务–右键 Distributed Transaction Coordinator–属性–启动–并将启动类型设置为自动启动

    go

    –然后创建一个作业定时调用上面的同步处理存储过程就行了

    企业管理器

    –管理

    –SQL Server代理

    –右键作业

    –新建作业

    –"常规"项中输入作业名称

    –"步骤"项

    –新建

    –"步骤名"中输入步骤名

    –“类型"中选择"Transact-SQL 脚本(TSQL)”

    –"数据库"选择执行命令的数据库

    –"命令"中输入要执行的语句: exec p_process

    –确定

    –"调度"项

    –新建调度

    –"名称"中输入调度名称

    –"调度类型"中选择你的作业执行安排

    –如果选择"反复出现"

    –点"更改"来设置你的时间安排

    然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行

    设置方法:

    我的电脑–控制面板–管理工具–服务–右键 SQLSERVERAGENT–属性–启动类型–选择"自动启动"–确定.

    –3.实现同步处理的方法2,定时同步

    –在srv1中创建如下的同步处理存储过程

    create proc p_process
    as
    –更新修改过的数据
    update b set name=i.name,telphone=i.telphone
    from srv2.库名.dbo.author b,author i
    where b.id=i.id and
    (b.name <> i.name or b.telphone <> i.telphone)

    –插入新增的数据
    insert srv2.库名.dbo.author(id,name,telphone)
    select id,name,telphone from author i
    where not exists(
    select * from srv2.库名.dbo.author where id=i.id)

    –删除已经删除的数据(如果需要的话)
    delete b
    from srv2.库名.dbo.author
    where not exists(
    select * from author where id=b.id)
    go

    展开全文
  • 三、技巧 1、1=1,1=2的使用,在SQL语句组合时用的较多 “where 1=1” 是表示选择全部 “where 1=2”全部不选, 如: if@strWhere !='' begin set @strSQL = 'select count(*) as Total from [' + @tblName + '] ...
  • 2.7 如何创建灵活的SQL语句 2.7.1 解决方案 2.7.2 讨论 2.8 如何获得受影响的行数 2.9 如何获得一个新插入行的自动增加字段 2.9.1 解决方案 2.9.2 讨论 2.10 如何搜索表 2.10.1 解决方案 2.10.2 讨论 2.11 如何进行...
  • 目录一、zipfile.ZipFile()二、Zipfile下的write()方法os.walk(path)方法压缩该路径下的所有文件只压缩文件夹中的特定文件觉得不错记得点赞关注哟! 最近Python在各大社交媒体被炒得那是一个如火如荼呀,很多大...
  • SQL语句大全及其详解

    千次阅读 2019-03-06 16:52:44
    9、说明:in 的使用方法 select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’) 10、说明:两张关联表,删除主表中已经在副表中没有的信息 delete from table1 where not exists ( select * ...
  • 经典SQL语句大全(1)

    千次阅读 2021-02-02 14:04:29
    order by id desc 三、技巧 1、1=1,1=2的使用,在SQL语句组合时用的较多 “where 1=1” 是表示选择全部 “where 1=2”全部不选, 如: if @strWhere !='' begin set @strSQL = 'select count(*) as Total from [' +...
  • 经典SQL查询语句大全

    千次阅读 多人点赞 2018-03-09 14:38:10
    9、说明:in 的使用方法 select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’) 10、说明:两张关联表,删除主表中已经在副表中没有的信息 delete from table1 where not exists ( select * ...
  • 经典SQL语句大全

    热门讨论 2014-12-20 12:00:30
    9、说明:in 的使用方法 select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’) 10、说明:两张关联表,删除主表中已经在副表中没有的信息 delete from table1 where not exists ( select * ...
  • Oracle语句大全

    万次阅读 多人点赞 2018-08-29 17:16:17
    9、说明:in 的使用方法 select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’) 10、说明:两张关联表,删除主表中已经在副表中没有的信息  delete from table1 where not exists ( select ...
  • sql server基础语句大全

    千次阅读 2020-04-10 11:27:14
    文字被哪些存储过程调用 select distinct name from syscomments a,sysobjects b where a.id=b.id and b.xtype=‘p’ and text like ‘%update T%’ 三、技巧 1、1=1,1=2的使用,在SQL语句组合时用的较多 “where 1...
  • 撰文:川川 您将在本篇中看完收获到 换行与缩进 空格约束 常见开发实用技巧 · 正 · 文 · 来 · 啦 · 01 换行与缩进 每行语句的字符数不得超过120个英文字符,当一行的字符超过120行时,可以换行(这个不是硬性规定,...
  • MySQL数据库-表操作-SQL语句(一)

    千次阅读 2021-01-18 20:31:28
    这些技术中的都使用不同的存储机制、索引技巧、锁定水平并且最终提供不同的功能和能力。 通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。 事务:针对于一组操作,要么都成功 要么...
  • Oracle常用SQL语句大全

    千次阅读 2020-06-02 11:10:11
    ORACLE常用SQL语句大全 一、基础1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server--- 创建 备份数据的 device USE master EXEC sp_...
  • 经典sql server基础语句大全

    万次阅读 多人点赞 2018-05-26 20:44:19
    的使用方法 select * from table1 where a [ not ] in (‘值1’,’值2’,’值4’,’值6’) 10 、说明:两张关联表,删除主表中已经在副表中没有的信息 delete from table1 where not exists ...
  • Oracle数据库常用语句

    万次阅读 2019-04-01 22:07:48
    9、说明:in 的使用方法 select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’) 10、说明:两张关联表,删除主表中已经在副表中没有的信息 delete from table1 where not exists ( select *...
  • sqlite3语句大全

    千次阅读 2019-01-30 15:52:33
    9、说明:in 的使用方法 select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’) 10、说明:两张关联表,删除主表中已经在副表中没有的信息  delete from table1 where not exists ( select * ...
  • switch……case语句中,switch后面跟一个变量,这个变量不可以是字符数组,字符指针,字符串数组,浮点型(实型)。它可以是整型,字符型(在本质上也是整型)。所以这导致case后面的常量表达式只能是整型和字符型,不...
  • 常用SQL 语句大全

    2011-06-18 11:47:51
    3、压缩数据库 dbcc shrinkdatabase(dbname) 4、转移数据库给新用户以已存在用户权限 5、检查备份集 6、修复数据库 7、日志清除 8、更改某个表 9、存储更改全部表 10、SQL SERVER中直接循环写入数据 数据...
  • 测试基本技巧方法

    万次阅读 2018-08-24 11:18:42
     界面的一致性既包括使用标准的控件,也指相同的信息表现方法,如在字体、标签风格、颜色、术语、显示错误信息等方面确保一致。  1.在不同分辨率下的美观程度  软件界面要有一个默认的分辨率,而在其他...
  • MySQL基本语句大全

    万次阅读 2018-06-09 19:28:55
    9、说明:in 的使用方法 select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’) 10、说明:两张关联表,删除主表中已经在副表中没有的信息 delete from table1 where not exists ( select...
  • oracle经典SQL语句大全

    千次阅读 2019-07-05 15:50:49
    9、说明:in 的使用方法 select * from table1 where a [not] in ('值1','值2','值4','值6') 10、说明:两张关联表,删除主表中已经在副表中没有的信息  delete from table1 where not exists ( select * from ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,059
精华内容 10,823
关键字:

压缩语句技巧方法