执行sql时出现语法错误

执行sql时出现语法错误,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我在其中一条sql语句中发现语法错误,如下语句示例所示 Declare @SQL nvarchar(max) set @SQL =' select Case When isnull(M_loc.BeginAge, '')='' and isnull(M_loc.EndAge, '')='' then '' else Convert(nvarchar(5),M_loc.BeginAge)+' To '+Convert(nvarchar(5),M_loc.

我在其中一条sql语句中发现语法错误,如下语句示例所示

Declare @SQL nvarchar(max)

set @SQL =' select Case When isnull(M_loc.BeginAge, '')='' and  isnull(M_loc.EndAge, '')='' 
         then '' 
         else Convert(nvarchar(5),M_loc.BeginAge)+' To '+Convert(nvarchar(5),M_loc.EndAge)
          End AS [Age_Limit]'


sp_executesql (@SQL)
我得到以下错误:

味精156,第15级,状态1,第6行 关键字“To”附近的语法不正确


尝试此操作,您缺少+s和:

DECLARE @SQL NVARCHAR(MAX) = N'
    SELECT
        CASE WHEN ISNULL(10, '''') = '''' AND ISNULL('''', '''') = '''' THEN ''''
        ELSE CONVERT(NVARCHAR(5), 10) + ' + ''' To ''' + ' + CONVERT(NVARCHAR(5), 20)
    END;';
SELECT @SQL;
EXEC(@SQL);

如果您使用的是sql server 2012或更高版本,请尝试使用以下代码:

Case When isnull(M_loc.BeginAge, -1)=-1 and  isnull(M_loc.EndAge, -1)=-1
 then '' 
 else CONCAT(M_loc.BeginAge,' To ',M_loc.EndAge) End AS [Age_Limit]

也许在这方面我们也能做到

DECLARE @SQL NVARCHAR(MAX) = N'
        SELECT
            CASE WHEN ISNULL(10, '''') = '''' AND ISNULL('''', '''') = '''' THEN ''''
            ELSE CONVERT(NVARCHAR(5), 10) + ' + ''' To ''' + ' + CONVERT(NVARCHAR(5), 20)
        END;';
    SELECT @SQL;
    EXEC(@SQL);

这种语法尝试毫无意义,到底要做什么?为什么要使用带常量的ISNULL作为第一个值?这只是一个示例代码,我在DB中使用的查询就是这样,这只是整个查询的一部分,这就是为什么我要为此编写一个示例代码。@user2613346-谁编写了该查询?SQL中的转换不能以这种方式工作。我假设您想要编写的是当myColumn=10时选择CASE,然后选择20,否则myColumn将作为myTable中的myColumnCalc结束。您正在使用最复杂的方法尝试切换2个值,但缺少FROM子句。最后,使用EXEC sp_executesql@sql。虽然它显然需要更改,因为您已经更改了您的问题。。。