GVKun编程网logo

在SQL Server存储过程中按索引而不是名称访问表的列(在sql server数据库中)

18

在本文中,我们将为您详细介绍在SQLServer存储过程中按索引而不是名称访问表的列的相关知识,并且为您解答关于在sqlserver数据库中的疑问,此外,我们还会提供一些关于asp.net–如何在SQ

在本文中,我们将为您详细介绍在SQL Server存储过程中按索引而不是名称访问表的列的相关知识,并且为您解答关于在sql server数据库中的疑问,此外,我们还会提供一些关于asp.net – 如何在SQL Server存储过程中使用逗号分隔(拆分)字符串、pdo 访问SQLSERVER存储过程无法获取结果集、SQL Server在SQL Server中使用SQL语句查询一个存储过程被其它所有的存储过程引用的存储过程名、SQL Server存储过程中SELECT 与 SET 对变量赋值的区别的有用信息。

本文目录一览:

在SQL Server存储过程中按索引而不是名称访问表的列(在sql server数据库中)

在SQL Server存储过程中按索引而不是名称访问表的列(在sql server数据库中)

有没有办法在sql Server的存储过程中通过索引访问列?

目的是计算大量列.我正在阅读游标,但我不知道如何应用它们.

让我解释一下我的问题:

我有一排像:

field_1 field_2 field_3 field_4 ...field_d  Sfield_1 Sfield_2 Sfield_3...Sfield_n
1       2       3       4          d        10       20       30         n

我需要计算像(field_1 * field1) – (Sfield_1 * Sfiled_1)/更多…

因此结果存储在表格列中d次.

所以结果是一个d列* d行表.

由于列数是可变的,我正在考虑制作动态sql,在字符串中获取列的名称并拆分我需要的列,但这种方法使问题更难.我认为按索引获取列数可以使生活更轻松.

解决方法

首先,如 OMG Ponies所述,您不能按其序号位置引用列.这不是意外. sql规范不是为DDL或DML中的动态模式构建的.

鉴于此,我不得不想知道为什么你的数据结构如你所知.当您尝试提取信息时,架构和问题域之间不匹配的迹象会自行显示.当查询的编写非常繁琐时,表明模式没有正确地为其设计的域建模.

但是,尽管如此,根据你告诉我们的情况,另一种解决方案如下:(我假设field_1 * field1意味着field_1 * field_1或field_1平方或Power(field_1,2) ))

Select 1 As Sequence,field_1 As [Field],Sfield_1 As [SField],Sfiled_1 As [SFiled]
Union All Select 2,field_2,Sfield_2,Sfiled_2
...
Union All Select n,field_n,Sfield_n,Sfiled_n

现在您的查询如下:

With Inputs As
    (
    Select 1 As Sequence,Sfiled_1 As [SFiled]
    Union All Select 2,Sfiled_2
    ....
    ),Results As
    (
    Select Case
            When Sequence = 1 Then Power( [Field],2 ) - ( [SField] * [SFiled] ) 
            Else 1 / Power( [Field],2 ) - ( [SField] * [SFiled] ) 
            End
            As Result
    From Inputs
    )
Select Exp( Sum( Log( Result ) ) )
From Results

asp.net – 如何在SQL Server存储过程中使用逗号分隔(拆分)字符串

asp.net – 如何在SQL Server存储过程中使用逗号分隔(拆分)字符串

我有一个复选框列表.所选(已检查)的项目存储在List< string>中.选择.

例如,选择的值是星期一,星期二,星期四,7天

我正在转换List<>以逗号分隔的字符串,即

string a= "monday,tuesday,thursday"

现在,我将此值作为字符串传递给存储过程.我想解雇像:

Select * 
from tblx 
where days = 'Monday' or days = 'Tuesday' or days = 'Thursday'`

我的问题是:如何在存储过程中分离字符串?

解决方法

如果您将逗号分隔(任何分隔符)字符串传递给存储过程并在查询中使用,那么必须吐出该字符串然后您将使用它.

下面有例子:

DECLARE @str VARCHAR(500) = 'monday,thursday'
CREATE TABLE #Temp (tDay VARCHAR(100))
WHILE LEN(@str) > 0
BEGIN
    DECLARE @TDay VARCHAR(100)
    IF CHARINDEX(',',@str) > 0
        SET  @TDay = SUBSTRING(@str,CHARINDEX(',@str))
    ELSE
        BEGIN
        SET  @TDay = @str
        SET @str = ''
        END
  INSERT INTO  #Temp VALUES (@TDay)
 SET @str = REPLACE(@str,@TDay + ','')
 END

 SELECT * 
 FROM tblx 
 WHERE days IN (SELECT tDay FROM #Temp)

pdo 访问SQLSERVER存储过程无法获取结果集

pdo 访问SQLSERVER存储过程无法获取结果集

如果存储过程直接访问并返回表,
如select * from table ,是可以得到结果集的,
但如果是用临时表,
如:
select * into #t1 from table1
select * from #t1
 则不行,请问大家为什么


回复讨论(解决方案)

我试验过了,只要有into语句存在,则结果都不会获得

php 为防止 SQL攻击,限制一个数据库操纵方法(函数)只允许执行一条 SQL 指令
希望你注意到这一点

如果
select * into #t1 from table1
select * from #t1
是存储过程中的内容
那么他将返回包含两个查询结果的结果集
你需要用 PDOStatement::nextRowset  遍历之

SQL Server在SQL Server中使用SQL语句查询一个存储过程被其它所有的存储过程引用的存储过程名

SQL Server在SQL Server中使用SQL语句查询一个存储过程被其它所有的存储过程引用的存储过程名

感兴趣的小伙伴,下面一起跟随小编 jb51.cc的小编两巴掌来看看吧!

这个问题对于规模稍微大些的项目而言,显得尤其重要了,数据库中如果有几百个存储过程,
难道还一个个找不成,即使自己很了解业务和系统,时间长了,也难免能记得住。

如何使用sql语句进行查询呢?

下面就和大家分享下SQL查询的方法:
 

代码如下:

select distinct name 
from syscomments a,sysobjects b 
where a.id=b.id and b.xtype='p' and text like '%pro_GetSN%' 


上面的蓝色字体部分表示要查询的存储过程的名称。


作者 weizhiai12

SQL Server存储过程中SELECT 与 SET 对变量赋值的区别

SQL Server存储过程中SELECT 与 SET 对变量赋值的区别

感兴趣的小伙伴,下面一起跟随小编 jb51.cc的小编两巴掌来看看吧!

sql Server推荐使用 SET 而不是 SELECT 对变量进行赋值。
当表达式返回一个值并对一个变量进行赋值时,推荐使用 SET 方法。
下表列出 SET 与 SELECT 的区别。请特别注意红色部分。

 

  set select
同时对多个变量同时赋值 不支持 支持
表达式返回多个值时 出错 将返回的最后一个值赋给变量
表达式未返回值 变量被赋null值 变量保持原值

下面以具体示例来说明问题:
create table chinadba1(
userid int,
addr varchar(128) 
)
go
insert into chinadba1(userid,addr) values(1,'addr1')
insert into chinadba1(userid,addr) values(2,'addr2')
insert into chinadba1(userid,addr) values(3,'addr3')
go

表达式返回多个值时,使用 SET 赋值 
declare @addr varchar(128)
set @addr = (select addr from chinadba1)
/*
--出错信息为
服务器: 消息 512,级别 16,状态 1,行 2
子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
*/
go
表达式返回多个值时,使用 SELECT 赋值 declare @addr varchar(128)
select @addr = addr from chinadba1
print @addr --结果集中最后一个 addr 列的值
--结果: addr3 
go

表达式未返回值时,使用 SET 赋值 declare @addr varchar(128)
set @addr = '初始值'
set @addr = (select addr from chinadba1 where userid = 4 )
print @addr --null值 
go

表达式未返回值时,使用 SELECT 赋值 declare @addr varchar(128)
set @addr = '初始值'
select @addr = addr from chinadba1 where userid = 4
print @addr --保持原值
go

需要注意的是,SELECT 也可以将标量子查询的值赋给变量,如果标量子查询不返回值,则变量被置为 null 值。
此时与 使用 SET 赋值是完全相同的
对标量子查询的概念大家应该都觉得陌生,举个例子就能说明
declare @addr varchar(128)
set @addr = '初始值'
--select addr from chinadba1 where userid = 4 为标量子查询语句
select @addr = (select addr from chinadba1 where userid = 4) 
print @addr --null值
go

我们今天的关于在SQL Server存储过程中按索引而不是名称访问表的列在sql server数据库中的分享就到这里,谢谢您的阅读,如果想了解更多关于asp.net – 如何在SQL Server存储过程中使用逗号分隔(拆分)字符串、pdo 访问SQLSERVER存储过程无法获取结果集、SQL Server在SQL Server中使用SQL语句查询一个存储过程被其它所有的存储过程引用的存储过程名、SQL Server存储过程中SELECT 与 SET 对变量赋值的区别的相关信息,可以在本站进行搜索。

本文标签: