字符串查询中的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”是一列