使用用户提供的数据-T-sql加入查询

时间:2014-03-17 11:20:53

标签: sql-server tsql

我有一个需求,用户将在vb.net应用程序的文本区域中提供许多ID(以Hundres /千计),我需要在T-Sql(Sql Server)中使用这些ID来获取数据。我不想在任何数据库表中保存这些ID。只想使用参数(varchar(max)的类型)并在程序中使用。

实际上,只允许对vb应用程序用户进行读访问。它是Sql-2005 database.Id字段是atleaset 12到15个字符长度。用户将从其他源复制/粘贴数据可能是CSV或Excel文件。

任何想法我怎么能做到这一点。

感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:0)

如果您不想按照其他地方的建议使用表值参数,并且您不想将ID存储在临时表中,则可以执行以下操作。

假设您的ID是整数值,用逗号分隔,在参数字符串中,您可以在SQL语句的WHERE过滤器中使用LIKE运算符:

假设您有一个varchar(max)类型的参数@IDs。您只想从MyTable获取那些ID列包含已在@ IDs-parameter中键入的值的记录。然后你的查询应该是这样的:

SELECT * FROM MyTable
WHERE ',' + @IDs + ',' LIKE '%,' + CAST(ID AS varchar) + ',%'

注意我如何在@IDs参数前面添加额外的逗号并附加逗号。这是为了确保LIKE运算符仍然可以按预期工作在字符串中的第一个和最后一个ID。确保采取针对SQL注入的必要预防措施,例如通过验证用户是否只允许输入整数和逗号。

答案 1 :(得分:0)

尝试使用CHARINDEX

DECLARE @selectedIDs varchar(max) = '1,2,3'
Set @selectedIDs = ',' + @selectedIds + ',' --string should always start and end with ','

SELECT * FROM YourTable
WHERE CHARINDEX(',' + CAST(IDColumn as VARCHAR(10)) + ',', @selectedIds) > 0