我试图让用户选择他们想从表中查看哪些列,即使他们没有填写某人的全名(例如过滤器),也能够获得结果。当下面的代码不在SET字符串中时,它可以正常工作,但在正常情况下,我确实有一个看不见的错误。该错误在“ WHERE”行中,这正是SQL Server告诉我的。
DECLARE @SQL NVARCHAR(Max) = ''
SET @SQL =
'
SELECT ' + @TableList + ' FROM People
WHERE (IsNull(Input.Name, '''') LIKE ''%'' '+ @Name +' ''%'')
'
EXEC(@SQL)
下面是当查询不在字符串中并且可以正常工作时的样子。
SELECT [Name], [Age], [City] FROM People
WHERE (IsNull(Input.Name, '') LIKE '%' + @Name + '%')
假设用户输入名称“ Tom”,他们将获得以下结果...
Name Age City
Tom 28 NY
Tommy 35 LA
我收到的错误消息是...
The data types varchar and varchar are incompatible in the modulo operator.
这确实让我感到困惑,因为当它不在字符串中时,它可以正常工作。
答案 0 :(得分:4)
您的对帐单中有太多'。
DECLARE @SQL NVARCHAR(Max) = ''
SET @SQL =
'
SELECT ' + @TableList + ' FROM People
WHERE (IsNull(Input.Name, '''') LIKE ''%'+ @Name +'%'')
'
EXEC(@SQL)