MS SQL 语法 SET 与 SELECT
MS SQL syntax SET vs. SELECT
我正在尝试遵循以下 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')
我的问题:
- 为什么
@path
使用 SET
,而 @fileDate
使用 SELECT
?
- 为什么
@fileDate
SET
也不是?
在您的示例中,Set 或 Select 是相同的。
Select 用于选择多个变量的值,如下所示
这个有效
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) ,@path = 'C:\Backup\'
但这不起作用
set @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) ,@path = 'C:\Backup\'
在你的情况下,我看不出原因。如果我想一次设置多个值,我会使用 Select 而不是 Set 的原因之一。
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
因为它是一个备份查询
SET @path = 'C:\Backup\' --- 这意味着我们正在静态路径上进行备份
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) --- 由于 getdate() 的缘故,filedate 将是动态的,它可以用于 .bak 文件命名约定所以这就是为什么我们大多使用 select 作为 @filedate
例如如果每天执行一次备份。
然后它可能会提供静态路径 (@path) 上的备份和带有命名约定的备份,例如____bkup_20160519.bak
这里的 20160519 是@filedate,每天都会变化
如果您需要更多关于它的想法,请告诉我。
我正在尝试遵循以下 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')
我的问题:
- 为什么
@path
使用SET
,而@fileDate
使用SELECT
? - 为什么
@fileDate
SET
也不是?
在您的示例中,Set 或 Select 是相同的。 Select 用于选择多个变量的值,如下所示
这个有效
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) ,@path = 'C:\Backup\'
但这不起作用
set @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) ,@path = 'C:\Backup\'
在你的情况下,我看不出原因。如果我想一次设置多个值,我会使用 Select 而不是 Set 的原因之一。
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
因为它是一个备份查询
SET @path = 'C:\Backup\' --- 这意味着我们正在静态路径上进行备份
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) --- 由于 getdate() 的缘故,filedate 将是动态的,它可以用于 .bak 文件命名约定所以这就是为什么我们大多使用 select 作为 @filedate
例如如果每天执行一次备份。
然后它可能会提供静态路径 (@path) 上的备份和带有命名约定的备份,例如____bkup_20160519.bak
这里的 20160519 是@filedate,每天都会变化
如果您需要更多关于它的想法,请告诉我。