小编iam*_*ave的帖子

如何在MS SQL Server 2005中确定表值变量的内部名称

可以使用确定#t1等临时表的名称

select @TableName = [Name]
from tempdb.sys.tables 
where [Object_ID] = object_id('tempDB.dbo.#t1')
Run Code Online (Sandbox Code Playgroud)

如何找到表值变量的名称,即声明的变量名称

declare @t2 as table (a int)
Run Code Online (Sandbox Code Playgroud)

目的是能够使用类似的东西获取关于表的元信息

select @Headers = dbo.Concatenate('[' + c.[Name] + ']')  
from  sys.all_columns c
    inner join sys.tables t
        on c.object_id = t.object_id
where t.name = @TableName
Run Code Online (Sandbox Code Playgroud)

虽然对于临时表,你必须查看tempdb.sys.tables而不是sys.tables.你在哪里寻找表值变量?


我现在意识到我不能做我想做的事情,这是写一个通用函数来将表值变量格式化为html表.对于初学者,在sql server 2005中,您无法传递表值参数:

http://www.sqlteam.com/article/sql-server-2008-table-valued-parameters

而且,在sql server 2008中,参数必须是强类型的,因此您将始终知道列的数量和类型.

t-sql

4
推荐指数
2
解决办法
1398
查看次数

t-sql按类别分组并获得前n个值

想象一下,我有这张桌子:

Month | Person | Value
----------------------
Jan   | P1     | 1
Jan   | P2     | 2
Jan   | P3     | 3
Feb   | P1     | 5
Feb   | P2     | 4
Feb   | P3     | 3
Feb   | P4     | 2
...
Run Code Online (Sandbox Code Playgroud)

我如何构建一个t-sql查询来获取前2个值的行,而第三个查询获得其他值的总和?

像这样的东西:

RESULT: 
Month | Person | Value
----------------------
Jan   | P3     | 3
Jan   | P2     | 2
Jan   | Others | 1 -(sum of the bottom value - in this case (Jan, P1, 1))
Feb …
Run Code Online (Sandbox Code Playgroud)

t-sql

4
推荐指数
1
解决办法
2905
查看次数

NQL的TSQL集团

我可以用秒或分钟进行分组,如下所示:

SELECT datepart(minute, Time)
      ,count(*) as hits
FROM Log
GROUP BY datepart(minute, Time)
Run Code Online (Sandbox Code Playgroud)

有没有办法可以做同样的事情,但有一个指定的秒数,所以按"每10秒"分组一次?

更多信息:
这与之间的时间相结合:

SELECT datepart(minute, Time)
      ,count(*) as hits
FROM Log with (nolock)
WHERE Time between dateadd(minute, -2, getdate()) and getdate()
GROUP BY datepart(minute, Time)
Run Code Online (Sandbox Code Playgroud)

t-sql

4
推荐指数
1
解决办法
1682
查看次数

IN关键字与OR关键字

如果我在WHERE子句中使用以下任一项,它会有很大的不同:

WHERE [Process Code] = 1 AND ([Material ID] = 'PLT' OR [Material ID] = 'BMI')

--or

WHERE [Process Code] =  1 AND [Material ID] IN ('PLT', 'BMI')
Run Code Online (Sandbox Code Playgroud)

我会用一次而不是另一次吗?

t-sql

4
推荐指数
1
解决办法
91
查看次数

@ $的T-SQL用法

我加入了这个新项目,发现了一种在SQL Server存储过程中声明本地变量的不同方法

DECLARE @$prog VARCHAR(50),
        @$errno INT
Run Code Online (Sandbox Code Playgroud)

我一直习惯@在T-SQL中声明局部变量,想知道何时使用@$

请指导.

t-sql

4
推荐指数
1
解决办法
115
查看次数

TSQL:以单词而非数字显示月份的功能

MONTH(CMS.App_Received_Date) as 'App Month'
Run Code Online (Sandbox Code Playgroud)

将于44月返回日期2012-04-01

将于55月返回日期2012-05-02

是否有TSQL函数返回4月,5月,6月?

MONTHNAME(CMS.App_Received_Date) as 'App Month'

t-sql

4
推荐指数
1
解决办法
1623
查看次数

tsql -group by by max datetime in rows

我有一个表,它的数据如下所示:

 id         name       date
 ---------  ---------  ----------
 1          a          2012-08-30 10:36:27.393
 1          b          2012-08-30 14:36:27.393
 2          c          2012-08-30 13:36:27.393
 2          d          2012-08-30 16:36:27.393
Run Code Online (Sandbox Code Playgroud)

我使用此查询检索最大日期时间:

SELECT id,Max(date) as mymaxdate
FROM table1
group by id
Run Code Online (Sandbox Code Playgroud)

这个查询向我提供了两行,如下所示:

1     2012-08-30 14:36:27.393
2     2012-08-30 16:36:27.393
Run Code Online (Sandbox Code Playgroud)

这是正确的,但我如何更改它以检索此结果?

1   b  2012-08-30 14:36:27.393
2   d  2012-08-30 16:36:27.393
Run Code Online (Sandbox Code Playgroud)

谢谢

t-sql

4
推荐指数
1
解决办法
6501
查看次数

在 SQL Server 中将 varchar 转换为 nvarchar 失败

我有一个 SQL Server 表,其中包含varchar(50)使用 SQL Server 导入向导进行 CSV 导入的结果类型的列。

我想知道如何更改此数据类型nvarchar(9)而不出现 SQL Server 截断错误。

我尝试进行批量更新来设置我需要的数据类型和列大小,但当我尝试将 csv 加载到我创建的空数据库表(带有我需要的所需数据类型)时,仍然出现截断错误消息。

感谢您的任何帮助。

sql sql-server types type-conversion

4
推荐指数
1
解决办法
6万
查看次数

Sql LIKE语句.字符串的结尾

我必须选择其中包含特定文本,并结束了所有领域 ",',)或空格字符或这段文字被放置在字符串的结尾.

所以,我需要这样的东西:

select *
from MyTable
Where Column1 like '%' + @text + '["'') ]%'
Run Code Online (Sandbox Code Playgroud)

此查询正常工作,直到文本未放在最后Column1.

t-sql

3
推荐指数
1
解决办法
3833
查看次数

TSQL日期时间比较

我想要做的是从sql获取结果,其中日期在一定范围内,但它不能正常工作,这是我的查询.

DECLARE @CurrDate DATETIME
SET @CurrDate = GETDATE()
SELECT dbo.ProductDetails.PartnerID
      ,dbo.ProductDetails.ProductID
      ,dbo.Products.ProductName
      ,StartDate
      ,EndDate
FROM dbo.ProductDetails
    INNER JOIN dbo.Products
        ON dbo.ProductDetails.ProductID = dbo.Products.ProductID
WHERE CONVERT(VARCHAR(10),StartDate,111) <= @CurrDate
  AND CONVERT(VARCHAR(10),EndDate,  111) >= @CurrDate 
Run Code Online (Sandbox Code Playgroud)

但是当该Enddate = @CurrDate行没有显示时,如果我将该日期提高一天,则会显示该日期.我做错了吗?任何建议都可以,谢谢.

t-sql

3
推荐指数
1
解决办法
3万
查看次数

标签 统计

t-sql ×9

sql ×1

sql-server ×1

type-conversion ×1

types ×1