可以使用确定#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中,参数必须是强类型的,因此您将始终知道列的数量和类型.
想象一下,我有这张桌子:
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) 我可以用秒或分钟进行分组,如下所示:
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) 如果我在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)
我会用一次而不是另一次吗?
我加入了这个新项目,发现了一种在SQL Server存储过程中声明本地变量的不同方法
DECLARE @$prog VARCHAR(50),
@$errno INT
Run Code Online (Sandbox Code Playgroud)
我一直习惯@在T-SQL中声明局部变量,想知道何时使用@$?
请指导.
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'
我有一个表,它的数据如下所示:
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)
谢谢
我有一个 SQL Server 表,其中包含varchar(50)使用 SQL Server 导入向导进行 CSV 导入的结果类型的列。
我想知道如何更改此数据类型nvarchar(9)而不出现 SQL Server 截断错误。
我尝试进行批量更新来设置我需要的数据类型和列大小,但当我尝试将 csv 加载到我创建的空数据库表(带有我需要的所需数据类型)时,仍然出现截断错误消息。
感谢您的任何帮助。
我必须选择其中包含特定文本,并结束了所有领域 ",',)或空格字符或这段文字被放置在字符串的结尾.
所以,我需要这样的东西:
select *
from MyTable
Where Column1 like '%' + @text + '["'') ]%'
Run Code Online (Sandbox Code Playgroud)
此查询正常工作,直到文本未放在最后Column1.
我想要做的是从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行没有显示时,如果我将该日期提高一天,则会显示该日期.我做错了吗?任何建议都可以,谢谢.