Tag: tsql

如何在t-sql中使用'execute'来设置variables的值?

DECLARE @dbName nvarchar(128) = 'myDb' DECLARE @siteId int exec ('SELECT TOP 1 @siteId = Id FROM ' + @dbName + '..myTbl') select @siteId 当我运行上面的脚本时,出现以下错误 Msg 137, Level 15, State 1, Line 1 Must declare the scalar variable "@siteId". (1 row(s) affected) 为什么以及如何解决它? 谢谢

SQL中DateTime字段的时间部分

我将如何能够在SQL中提取DateTime字段的时间部分? 对于我的项目,我不得不返回date时间为5pm的时间戳的数据

MS SQLdate只有没有时间

题 大家好, 我已经有一段时间困惑了很长一段时间,基本上使用T-SQL来实现DateTime SQLtypes。 本质上,我想要采取2008-12-1 14:30:12的date时间值,并使其2008-12-1 00:00:00。 我们为报告运行的查询中有很多在WHERE子句中使用了一个date值,但是我有一天的开始和结束date值,并使用BETWEEN,或者我find了其他方法。 目前我使用以下: WHERE CAST(CONVERT(VARCHAR, [tstamp], 102) AS DATETIME) = @dateParam 不过,这似乎有点笨重。 我希望能有像CAST([tstamp] AS DATE)这样更简单的东西, 有些地方在线推荐使用DATEPART()函数,但是最后我得到了这样的结果: WHERE DATEPART(year, [tstamp]) = DATEPART(year, @dateParam) AND DATEPART(month, [tstamp]) = DATEPART(month, @dateParam) AND DATEPART(day, [tstamp]) = DATEPART(day, @dateParam) WHERE DATEPART(year, [tstamp]) = DATEPART(year, @dateParam) AND DATEPART(month, [tstamp]) = DATEPART(month, @dateParam) AND DATEPART(day, [tstamp]) […]

当参数为空时插入默认值

我有一个表有一个默认值的列: create table t ( value varchar(50) default ('something') ) 我正在使用存储的过程将值插入到此表中: create procedure t_insert ( @value varchar(50) = null ) as insert into t (value) values (@value) 问题是,如何在@value为null时使用默认null ? 我试过了: insert into t (value) values ( isnull(@value, default) ) 这显然不起作用。 也试过了一个case陈述,但这也不太公平。 还有其他build议吗? 我是否以错误的方式去做这件事? 更新:我试图做到这一点, 而不必: 保持多个地方的default值,并 使用多个insert语句。 如果这是不可能的,那么我想我只能忍受它。 这似乎应该是可以实现的。 注意:我的实际表格有多个列。 我只是在写一个例子。

从存储过程Transact-SQL SQL Server中访问结果集

我正在使用SQL Server 2005,我想知道如何从transact-sql中访问不同的结果集。 下面的存储过程返回两个结果集,如何从另一个存储过程访问它们? CREATE PROCEDURE getOrder (@orderId as numeric) AS BEGIN select order_address, order_number from order_table where order_id = @orderId select item, number_of_items, cost from order_line where order_id = @orderId END 我需要能够遍历两个结果集单独。 编辑:只是为了澄清这个问题,我想testing存储过程。 我有一套从VB.NET客户端使用的存储过程,它返回多个结果集。 这些都不会变成表值函数,实际上我根本不能改变程序。 改变程序不是一个选项。 过程返回的结果集不是相同的数据types或列数。

CROSS APPLY vs OUTER APPLY速度差

我正在使用CROSS APPLY来join用户和GeoPhone表,一切工作都很快,但现在我有Phone列的NULL值的用户。 交叉应用在最终输出中跳过这些行。 所以我切换到OUTER APPLY。 但是它的工作速度要慢得多(当总输出行数增加1000倍时,速度要慢15倍以上)。 SELECT TOP (10000) dbo.Users.Login, dbo.Users.Phone, GeoPhone.Country FROM dbo.Users CROSS APPLY (SELECT TOP 1 Country FROM dbo.GeoPhone WHERE dbo.Users.Phone <= dbo.GeoPhone.[End]) GeoPhone 与: SELECT TOP (10000) dbo.Users.Login, dbo.Users.Phone, GeoPhone.Country FROM dbo.Users OUTER APPLY (SELECT TOP 1 Country FROM dbo.GeoPhone WHERE dbo.Users.Phone <= dbo.GeoPhone.[End]) GeoPhone 我试图理解为什么。 正如我所看到的执行计划是不同的。 但理论上我看不到任何可能导致这种放缓的计算。 有任何想法吗? 我最终的解决scheme: SELECT […]

SQL Server中图像字段内容的大小是多less?

我在SQL Server中有一个表。 该表有一个图像字段,应用程序在其中存储文件。 有没有办法使用T-SQL读取图像字段中的文件的大小?

从exec(@sql)返回值

我想从Exec(@sql)获取值并赋值给@Rowcount(int) 这是我的查询: 'SET @RowCount = (select count(*) FROM dbo.Comm_Services WHERE CompanyId = '+cast(@CompanyId as char)+' and '+@condition+')'

T SQL合并示例需要帮助理解

下列: MERGE dbo.commissions_history AS target USING (SELECT @amount, @requestID) AS source (amount, request) ON (target.request = source.request) WHEN MATCHED THEN UPDATE SET amount = source.amount WHEN NOT MATCHED THEN INSERT (request, amount) VALUES (source.request, source.amount); 从https://stackoverflow.com/a/2967983/857994是一个非常漂亮的方式来做插入/更新(和删除一些额外的工作)。 即使经过一些Googlesearch,我也发现很难跟踪。 有人可以请: 简单地解释一下 – MSDN文档在这种情况下会毁掉我的大脑。 向我展示如何修改它,以便用户可以键入数量和请求的值,而不是从另一个数据库位置select它们? 基本上,我想用它来从C#应用程序中插入/更新从我得到的XML文件中获取的信息。 所以,我需要了解如何手动制定一个查询来获取我的分析数据到这个机制的数据库。

事务隔离级别范围

SQL Server 2005中事务隔离级别的范围规则是什么? 我知道不同级别的意思,但不知道如何在手动运行的脚本之外正确应用它们。 我无法在生产质量代码中find实际使用的指南。 很明显,当你使用这样的命令时,范围就开始了: SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 但是它在哪里结束? 如果我在一个存储过程中设置iso级别,然后该proc调用另一个,嵌套proc是否inheritance它? 更好的是,如果我在嵌套的proc中升级iso级别,它会返回到调用过程中? 像BEGIN TRAN,ROLLBACK和COMMIT这样的事务命令是否有区别? 当应用程序或代理作业调用存储过程时,隔离级别更改会以某种方式持续下去? 我是否总是必须恢复到每个过程结束时的默认READ COMMITTED? 我会在不同的情况下testing它,但我不知道如何读取当前的隔离级别。