简体   繁体   English

MS SQL语法SET与SELECT

[英]MS SQL syntax SET vs. SELECT

I'm trying to follow the following SQL Query (Partial code): 我正在尝试遵循以下SQL查询(部分代码):

DECLARE @name VARCHAR(50)       -- database name  
DECLARE @path VARCHAR(256)      -- path for backup files  
DECLARE @fileName VARCHAR(256)  -- filename for backup  
DECLARE @fileDate VARCHAR(20)   -- used for file name 

SET @path = 'C:\Backup\'
SET @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) 

DECLARE db_cursor CURSOR FOR  
    SELECT name 
    FROM MASTER.dbo.sysdatabases 
    WHERE name NOT IN ('master','model','msdb','tempdb')

My questions: 我的问题:

  1. Why is @path using SET , while @fileDate using SELECT ? 为什么@path使用SET ,而@fileDate使用SELECT
  2. Why isn't @fileDate SET as well? 为什么@fileDate也没有SET

Since its a backup query 由于它是备份查询

SET @path = 'C:\\Backup\\' --- It means we are taking backup on a static path SET @path ='C:\\ Backup \\'---这意味着我们正在静态路径上进行备份

SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) --- filedate will be dynamic due to getdate() and it may be used in the .bak file naming convention so thats why mostly we use select for @filedate SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)---由于getdate(),filedate将是动态的,并且它可能会在.bak文件命名约定中使用,因此这就是为什么我们大多将select用于@归档日期

eg if performing a backup daily once. 例如,如果每天执行一次备份。

then it may provide the backup on static path (@path) and backup with naming convention eg ____bkup_20160519.bak 那么它可能会提供静态路径(@path)上的备份以及具有命名约定的备份,例如____ bkup_20160519.bak

here 20160519 is @filedate which will change daily 这里20160519是@filedate,每天都会更改

Let me know if you need more idea regarding it. 让我知道您是否需要更多关于此的想法。

In your exmaple either Set or Select is same. 在您的实例中,“设置”或“选择”是相同的。 Select is used to selected values to more than one variable like shown below Select用于选择多个变量的值,如下所示

This works 这有效

SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) ,@path = 'C:\Backup\'

but this does not work 但这不起作用

set @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) ,@path = 'C:\Backup\'

In your case I do not see a reason. 就您而言,我看不出原因。 One reason I would use Select over Set if I want to set multiple values at once. 如果要一次设置多个值,我会使用“选择集”的原因之一。

DECLARE @name VARCHAR(50) -- database name  
DECLARE @path VARCHAR(256) -- path for backup files  
DECLARE @fileName VARCHAR(256) -- filename for backup  
DECLARE @fileDate VARCHAR(20) -- used for file name 

--SET @path = 'C:\Backup\'  

Select  @path = 'C:\Backup\' , @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)

Select @Path, @FileDate

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM