在T_SQL中声明多个变量

时间:2014-02-26 15:21:23

标签: sql-server tsql

我有以下声明:

DECLARE @orderGUID VARCHAR(50) = NEWID(),
    @deliveryId VARCHAR(50) = NEWID(),
    @orderChildGUID VARCHAR(50) = NEWID(),
    @deliveryIdChild VARCHAR(50) = NEWID(),
    @triggerFileName VARCHAR(50) = 'trigger_[X].txt',
    @triggerTime TIME = GETDATE(),
    @triggerDate DATE = GETDATE(),
    @dateTimeText CHAR(17) = rfa.dbo.FormatDate(@triggerDate, 'YYYYMMDD') 
     + LEFT(REPLACE(REPLACE(@triggerTime,':',''),'.',''),9);

出现以下错误: 必须声明标量变量“@triggerDate”

我试过这个并且它有效,但看起来并不好:

DECLARE @triggerTime TIME = GETDATE(),
        @triggerDate DATE = GETDATE();
DECLARE @orderGUID VARCHAR(50) = NEWID(),
        @deliveryId VARCHAR(50) = NEWID(),
        @orderChildGUID VARCHAR(50) = NEWID(),
        @deliveryIdChild VARCHAR(50) = NEWID(),
        @triggerFileName VARCHAR(50) = 'trigger_[X].txt',
        @dateTimeText CHAR(17) = rfa.dbo.FormatDate(@triggerDate, 'YYYYMMDD') 
         + LEFT(REPLACE(REPLACE(@triggerTime,':',''),'.',''),9);

是否可以只使用一个声明来执行此操作?

2 个答案:

答案 0 :(得分:2)

需要单独声明: -

DECLARE @triggerDate DATE = GETDATE(), @triggerTime TIME = GETDATE()
DECLARE @orderGUID VARCHAR(50) = NEWID(),
        @deliveryId VARCHAR(50) = NEWID(),
        @orderChildGUID VARCHAR(50) = NEWID(),
        @deliveryIdChild VARCHAR(50) = NEWID(),
        @triggerFileName VARCHAR(50) = 'trigger_[X].txt',
        @dateTimeText CHAR(17) = rfa.dbo.FormatDate(@triggerDate, 'YYYYMMDD') + LEFT             (REPLACE(REPLACE(@triggerTime,':',''),'.',''),9)

答案 1 :(得分:2)

没有

正如rbarryyoung在评论中写的那样。

顺便说一下,我倾向于选择“额外”DECLARE,特别是在开发过程中。我发现如果它们是每个人都更容易遵循被声明的内容并添加,删除或重新排序声明。这对我来说值得重复宣告。

DECLARE @triggerDate DATE = GETDATE()
DECLARE @triggerTime TIME = GETDATE()
DECLARE @orderGUID VARCHAR(50) = NEWID()
DECLARE @deliveryId VARCHAR(50) = NEWID()
DECLARE @orderChildGUID VARCHAR(50) = NEWID()
DECLARE @deliveryIdChild VARCHAR(50) = NEWID()
DECLARE @triggerFileName VARCHAR(50) = 'trigger_[X].txt'
DECLARE @dateTimeText CHAR(17) = rfa.dbo.FormatDate(@triggerDate, 'YYYYMMDD') + LEFT(REPLACE(REPLACE(@triggerTime,':',''),'.',''),9)

我不相信这两种风格之间存在任何性能差异,但有些人可能会在某些情况下显示更快的风格。那会很有趣。