存储过程中的奇怪错误

时间:2013-04-01 19:02:39

标签: sql-server stored-procedures

这是我在存储过程中的动态sql

BEGIN

SET NOCOUNT ON;
declare @SQL as varchar(4000)

set @SQL = 'CREATE VIEW vw_GCS_Export
    As
    select division, [primary image id],[Item Number], [Brand Name],[Marketing Description],
    [Colours]as Colors,[Live Date],[Sample Type],substring([FileName],charindex('+ CHAR(39) + '_' + CHAR(39) +',[FileName],1)+1,CHARINDEX('+ CHAR(39) + '.' + CHAR(39) +',[FileName],1)-5) as BatchID,
    '+ CHAR(39) + '670' + CHAR(39) +' as Status, [Primary image ID] + '+ CHAR(39) + '_P' + CHAR(39) +' as [Shot Name],
    Cast(Null as varchar(50))as [Swatch/Variation],Cast(Null as varchar(50))as [Alternate Shot],[UserName],''' + CAST(convert(date,Sysdatetime(),110)as varchar(10)) + ''' as [Import Date],
    Cast(Null as varchar(50))as [Return Instructions],Cast(Null as varchar(50))as [Rush Request], DATEADD(WEEKDAY,-5,[live date]) as [ImageDeliveryDate],
    '  + convert(varchar(50), ' + ' +  CHAR(39) + 'Division ' + CHAR(39) +' + [Division] + '+ CHAR(39) + ' * ' + CHAR(39) +' + [UserName] ) as JobName 
    from Sheet1$'


EXEC @SQL
select * from vw_GCS_Export

END

我在执行时遇到错误

Incorrect syntax near the keyword 'EXEC'.

我不确定为什么。我在SQL语句中似乎没有任何错误。

3 个答案:

答案 0 :(得分:5)

你需要括号:

EXEC (@sql)

请参阅How to run generated SQL from a variable?

答案 1 :(得分:2)

您的实际问题在这里:

 '  + convert(varchar(50), ' 

你有CONVERT没有第二个参数。您可能想要在动态SQL中包含CONVERT,或者您想要包含此部分

' + [UserName] ) as JobName

作为CONVERT的结尾,但在任何一种情况下,都不会编译,语法也会被破坏。

答案 2 :(得分:0)

以下是我最终的结果:

SET NOCOUNT ON;
declare @SQL as varchar(4000)

set @SQL = 'CREATE VIEW vw_GCS_Export
    As
    select division, [primary image id],[Item Number], [Brand Name],[Marketing Description],
    [Colours]as Colors,[Live Date],[Sample Type],substring([FileName],charindex('+ CHAR(39) + '_' + CHAR(39) +',[FileName],1)+1,CHARINDEX('+ CHAR(39) + '.' + CHAR(39) +',[FileName],1)-5) as BatchID,
    '+ CHAR(39) + '670' + CHAR(39) +' as Status, [Primary image ID] + '+ CHAR(39) + '_P' + CHAR(39) +' as [Shot Name],
    Cast(Null as varchar(50))as [Swatch/Variation],Cast(Null as varchar(50))as [Alternate Shot],[UserName],''' + CAST(convert(date,Sysdatetime(),110)as varchar(10)) + ''' as [Import Date],
    Cast(Null as varchar(50))as [Return Instructions],Cast(Null as varchar(50))as [Rush Request], DATEADD(WEEKDAY,-5,[live date]) as [ImageDeliveryDate],
    ' + CHAR(39) + 'Division ' + CHAR(39) +'+ cast([Division] as varchar(50)) + '+ CHAR(39) + ' * ' + CHAR(39) + ' + [UserName] as JobName 
    from Sheet1$'


    EXEC (@SQL)
    select * from vw_GCS_Export

关键是我不能在整个字符串上使用强制转换,我只能把它放在浮点字段[Division]上。我很感谢所有帮助FreshPrinceofSO