2013-06-20 55 views
1

这里是我的代码:动态SQL = [错误] 42000 - [SQL服务器]附近有语法错误 '01'

DECLARE @1day AS VARCHAR(MAX), @sqlText AS NVARCHAR(MAX), @firstdate AS DATETIME 

SET @firstdate = DATEADD(dd,-(DAY(GETDATE())-1),GETDATE()) 
SET @1day = CONVERT(VARCHAR(MAX), @firstdate, 103) 

SET @sqlText = 'SELECT ' + 'Dummy' + ' AS ' + @1day 

EXEC (@sqlText) 

我收到错误:[错误] 42000 - [SQL服务器]不正确的语法靠近'01'。

预期的结果是:

01/06/2013 
========== 
Dummy 

感谢您的帮助。

+0

您是否希望有显示为列名的日期? – shahkalpesh

回答

1

你必须附上两个Dummy@1day用单引号,否则@1day是列别名不正确的语法和Dummy被解释为列名。

有效的SQL:

DECLARE @1day AS VARCHAR(MAX), @sqlText AS NVARCHAR(MAX), @firstdate AS DATETIME 

SET @firstdate = DATEADD(dd,-(DAY(GETDATE())-1),GETDATE()) 
SET @1day = CONVERT(VARCHAR(MAX), @firstdate, 103) 

SET @sqlText = 'SELECT ' + '''Dummy''' + ' AS ''' + CAST(@1day as nvarchar) + '''' 

exec (@sqlText) 
+0

工程很好。谢谢。 –

1

试试这个:

DECLARE @1day VARCHAR(MAX), @sqlText NVARCHAR(MAX), @firstdate DATETIME 

SET @firstdate = DATEADD(dd,-(DAY(GETDATE())-1),GETDATE()) 
SET @1day = CONVERT(VARCHAR(MAX), @firstdate, 103) 

SET @sqlText = 'SELECT ' + '''Dummy''' + ' AS [' + @1day + ']' 

EXEC (@sqlText) 
+0

工程很棒。谢谢。 –