Asp.net 将同一列的多个参数传递给SQL Server select SP

Asp.net 将同一列的多个参数传递给SQL Server select SP,asp.net,sql,sql-server,sql-server-2005,Asp.net,Sql,Sql Server,Sql Server 2005,我在web.config中有一个字符串值-例如,2个GUID由“,”分隔。我需要动态查询数据库(即我不知道web.config中有多少个值可以用逗号分隔),并在表上运行select语句,传递这些值并获取所有相关信息,例如: select * from tablename where columnname = string1 string2 string3 etc etc 某些字符串可能只包含1个guid,某些字符串可能包含10个guid请查看有关此主题的Erland Sommarskogs精彩

我在web.config中有一个字符串值-例如,2个GUID由
“,”
分隔。我需要动态查询数据库(即我不知道web.config中有多少个值可以用逗号分隔),并在表上运行select语句,传递这些值并获取所有相关信息,例如:

select * from tablename where columnname = string1 string2 string3 etc etc

某些字符串可能只包含1个guid,某些字符串可能包含10个guid请查看有关此主题的Erland Sommarskogs精彩文章:

SQL Server 2008还将提供向过程传递多个值的方法


Marc

查看Erland Sommarskogs关于此主题的优秀帖子:

SQL Server 2008还将提供向过程传递多个值的方法

Marc

您需要“处于”状态。如果您确实信任web.config,并且可以要求配置的元素也用引号括起来,那么您可以直接将其放入sql语句中:

select * from tablename where columnname IN ( "web.config value here" )
但是请注意,像这样的动态sql非常危险。另一方面,可以安全地将它们传递进来。

您需要“处于”状态。如果您确实信任web.config,并且可以要求配置的元素也用引号括起来,那么您可以直接将其放入sql语句中:

select * from tablename where columnname IN ( "web.config value here" )

但是请注意,像这样的动态sql非常危险。另一方面,可以安全地传递它们。

您不必发送多个参数,只需发送一个字符串

一种可能性是将该字符串解析为SQL存储过程并构建动态查询

另一个可能性是在每个位置插入“”字符,并用于在下面编码

'aaa','bbb','ccc'

myTable
------------
ID  Name

1   eee
2   aaa
3   ggg
4   hhh
5   bbb


declare @stmt nvarchar(1000)
set @stmt = 'select * from myTable where Name in (''aaa'',''bbb'',''ccc'')'
exec spexecute_sql @stmt

您不必发送多个参数,只需发送一个字符串

一种可能性是将该字符串解析为SQL存储过程并构建动态查询

另一个可能性是在每个位置插入“”字符,并用于在下面编码

'aaa','bbb','ccc'

myTable
------------
ID  Name

1   eee
2   aaa
3   ggg
4   hhh
5   bbb


declare @stmt nvarchar(1000)
set @stmt = 'select * from myTable where Name in (''aaa'',''bbb'',''ccc'')'
exec spexecute_sql @stmt

这是基于Erland Sommarskogs的文章:

在使用my函数之前,您需要设置一个“helper”表,每个数据库只需执行一次:

CREATE TABLE Numbers
(Number int  NOT NULL,
    CONSTRAINT PK_Numbers PRIMARY KEY CLUSTERED (Number ASC)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
DECLARE @x int
SET @x=0
WHILE @x<8000
BEGIN
    SET @x=@x+1
    INSERT INTO Numbers VALUES (@x)
END
您可以拆分字符串或数字,以下是一些字符串示例:

DECLARE @YourString varchar(8000)
SET @YourString='monkey,elephant,dog,bear,zebra'
select * from FN_ListToTable(',',@YourString)

SET @YourString='two words,three words here,four words right here,five is the magic number,six words is even more fun'
select * from FN_ListToTable(',',@YourString)


SET @YourString='Doe, Jane; Smith, Joe; Public, John Q.'
select * from FN_ListToTable(';',@YourString)

这是基于Erland Sommarskogs的文章:

在使用my函数之前,您需要设置一个“helper”表,每个数据库只需执行一次:

CREATE TABLE Numbers
(Number int  NOT NULL,
    CONSTRAINT PK_Numbers PRIMARY KEY CLUSTERED (Number ASC)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
DECLARE @x int
SET @x=0
WHILE @x<8000
BEGIN
    SET @x=@x+1
    INSERT INTO Numbers VALUES (@x)
END
您可以拆分字符串或数字,以下是一些字符串示例:

DECLARE @YourString varchar(8000)
SET @YourString='monkey,elephant,dog,bear,zebra'
select * from FN_ListToTable(',',@YourString)

SET @YourString='two words,three words here,four words right here,five is the magic number,six words is even more fun'
select * from FN_ListToTable(',',@YourString)


SET @YourString='Doe, Jane; Smith, Joe; Public, John Q.'
select * from FN_ListToTable(';',@YourString)

我从未见过这种方法,可能会变得凌乱但有趣。我从未见过这种方法,可能会变得凌乱但有趣。你能帮忙吗,我使用的是字符串而不是数字,无法获得你的工作方法。你能解释一下帮助表吗帮助表基本上是一个名为numbers的表,其中包含一列“Number”,每个数字的行数为1到8000或更多。助手表有什么问题?函数使用它来查找拆分字符,内部派生表基本上为每个包含拆分字符的字符返回一行(不涉及循环)。外部派生表使用这些行来实际拆分字符串。您能帮忙吗,我使用的是字符串而不是数字,无法获得您的工作方法您能解释一下辅助表辅助表基本上是一个名为数字的表,包含一列“数字”,每个数字对应一行,从1到8000或更多。助手表有什么问题?函数使用它来查找拆分字符,内部派生表基本上为每个包含拆分字符的字符返回一行(不涉及循环)。外部派生表使用这些行来实际拆分字符串。我在动态@myString中传递我的值,它总是返回0个结果,你能帮忙吗?我在动态@myString中传递我的值,它总是返回0个结果,你能帮忙吗