字符串查询中的TSQL Where子句

字符串查询中的TSQL Where子句,sql,tsql,Sql,Tsql,我的问题是: SET @s_query = 'Select ROW_NUMBER() OVER (ORDER BY ' + @ColNames + ') AS ##RowNum, '+@ColNames+' INTO ##Results' + ' From TableA Where FirstName = ' +@Search+ ' ORDER BY FirstName'; 我正在使用以下参数运行存储过程: @Search = 'Adam', @ColName = 'FirstName'

我的问题是:

SET @s_query =

'Select ROW_NUMBER() OVER (ORDER BY ' + @ColNames + ') AS ##RowNum, 
'+@ColNames+' INTO ##Results' +
' From TableA
Where FirstName = ' +@Search+ ' 
ORDER BY FirstName';
我正在使用以下参数运行存储过程:

@Search = 'Adam', @ColName = 'FirstName','LastName'
以及获取错误:

" Invalid column name 'Adam'.

看起来你只是没有引用你的字符串。对于SQL,代码的输出方式如下所示:

Where FirstName = Adam
但你希望它看起来像:

Where FirstName = 'Adam'
因此,您希望更改代码的这一行,以便为其提供所需的单引号。请参见下面修改的代码集:

SET @s_query =

'Select ROW_NUMBER() OVER (ORDER BY ' + @ColNames + ') AS ##RowNum, 
'+@ColNames+' INTO ##Results' +
' From TableA
Where FirstName = ''' +@Search+ ''' 
ORDER BY FirstName';
现在,您的查询将显示:

Select ROW_NUMBER() OVER (ORDER BY FirstName, LastName) AS ##RowNum,       
FirstName, LastName INTO ##Results From TableA      
Where FirstName = 'Adam'       
ORDER BY FirstName, LastName

看起来你只是没有引用你的字符串。对于SQL,代码的输出方式如下所示:

Where FirstName = Adam
但你希望它看起来像:

Where FirstName = 'Adam'
因此,您希望更改代码的这一行,以便为其提供所需的单引号。请参见下面修改的代码集:

SET @s_query =

'Select ROW_NUMBER() OVER (ORDER BY ' + @ColNames + ') AS ##RowNum, 
'+@ColNames+' INTO ##Results' +
' From TableA
Where FirstName = ''' +@Search+ ''' 
ORDER BY FirstName';
现在,您的查询将显示:

Select ROW_NUMBER() OVER (ORDER BY FirstName, LastName) AS ##RowNum,       
FirstName, LastName INTO ##Results From TableA      
Where FirstName = 'Adam'       
ORDER BY FirstName, LastName

问题似乎在于,如果您为FirstName指定了条件,则您有:

Where FirstName = ' +@Search+ '
将字面翻译为:

Where FirstName = Adam
请注意搜索条件周围缺少的引号

请尝试此操作,以确保包含其他报价:

Where FirstName = ''' +@Search+ '''
最终将给出:

Where FirstName = 'Adam'

问题似乎在于,如果您为FirstName指定了条件,则您有:

Where FirstName = ' +@Search+ '
将字面翻译为:

Where FirstName = Adam
请注意搜索条件周围缺少的引号

请尝试此操作,以确保包含其他报价:

Where FirstName = ''' +@Search+ '''
最终将给出:

Where FirstName = 'Adam'

其他人已经指出了字符串criteria=Adam而不是='Adam'周围缺少的引号

通过构造模板并替换参数,我使用不同的技术来构建要调用的SQL:

declare @s_QueryTemplate = 
'  
Select ROW_NUMBER() OVER (ORDER BY <<ORDER BY COLUMN NAMES>>) AS ##RowNum, <<COLUMN NAMES>>   
INTO ##Results
From TableA
Where FirstName = ''<<SEARCH VALUE>>''
ORDER BY FirstName
'

SET @s_query =
REPLACE(
REPLACE(
REPLACE(
          @s_QueryTemplate   
        , '<<ORDER BY COLUMN NAMES>>', @ColNames
       ), '<<COLUMN NAMES>>', @ColNames
       ), '<<SEARCH VALUE>>', @Search
       )

我发现这样可以更容易地查看您试图创建的代码的结构,包括应该在哪里加引号之类的内容

其他人已经指出了字符串criteria=Adam而不是='Adam'周围缺少的引号

通过构造模板并替换参数,我使用不同的技术来构建要调用的SQL:

declare @s_QueryTemplate = 
'  
Select ROW_NUMBER() OVER (ORDER BY <<ORDER BY COLUMN NAMES>>) AS ##RowNum, <<COLUMN NAMES>>   
INTO ##Results
From TableA
Where FirstName = ''<<SEARCH VALUE>>''
ORDER BY FirstName
'

SET @s_query =
REPLACE(
REPLACE(
REPLACE(
          @s_QueryTemplate   
        , '<<ORDER BY COLUMN NAMES>>', @ColNames
       ), '<<COLUMN NAMES>>', @ColNames
       ), '<<SEARCH VALUE>>', @Search
       )

我发现这样可以更容易地查看您试图创建的代码的结构,包括应该在哪里加引号之类的内容

你是说@ColName='FirstName','LastName'?如果这不是问题,请粘贴完整的sql和@s_query.Alex的转储文件。这些只是参数。问题在于where子句中,我在运行SP时遇到了错误。它假设“Adam”是一个列。你的意思是@ColName='FirstName','LastName'?如果这不是问题所在,请粘贴@s_query.Alex的完整sql和转储文件。这些只是参数问题,在运行SP时,where子句中出现了错误。它假定“Adam”是一列