在T-SQL中,这是允许的:
DECLARE @SelectedValue int
SELECT @SelectedValue = MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1
Run Code Online (Sandbox Code Playgroud)
因此,有可能获得SELECT的值并将其填充到变量中(显然它是标量).
如果我在存储过程中放入相同的选择逻辑:
CREATE PROCEDURE GetMyInt
AS
SELECT MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1
Run Code Online (Sandbox Code Playgroud)
我可以获取此存储过程的输出并将其填充到变量中吗?
就像是:
DECLARE @SelectedValue int
SELECT @SelectedValue = EXEC GetMyInt
Run Code Online (Sandbox Code Playgroud)
(我知道上面的语法是不允许的,因为我试过了!)
我有一个在交易过程中需要很长时间的查询.当我得到wait_type它的过程时PAGEIOLATCH_SH.
这种等待类型是什么意思,如何解决?
有没有办法生成类型为varchar(32)的MD5哈希字符串,而不使用fn_varbintohexstr
SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'email@dot.com')), 3, 32)
Run Code Online (Sandbox Code Playgroud)
所以它可以在带有SCHEMABINDING的视图中使用
我正在尝试将一个表中的值设置为另一个表中的值的总和.这些方面的东西:
UPDATE table1
SET field1 = SUM(table2.field2)
FROM table1
INNER JOIN table2 ON table1.field3 = table2.field3
GROUP BY table1.field3
Run Code Online (Sandbox Code Playgroud)
当然,正如这一点,它将无法工作 - SET不支持SUM,也不支持GROUP BY.
我应该知道这一点,但我的想法是空白的.我究竟做错了什么?
我正在简化复杂的select语句,所以我想我会使用常用的表表达式.
声明一个cte工作正常.
WITH cte1 AS (
SELECT * from cdr.Location
)
select * from cte1
Run Code Online (Sandbox Code Playgroud)
是否可以在同一个SELECT中声明和使用多个cte?
即这个sql给出了一个错误
WITH cte1 as (
SELECT * from cdr.Location
)
WITH cte2 as (
SELECT * from cdr.Location
)
select * from cte1
union
select * from cte2
Run Code Online (Sandbox Code Playgroud)
错误是
Msg 156, Level 15, State 1, Line 7
Incorrect syntax near the keyword 'WITH'.
Msg 319, Level 15, State 1, Line 7
Incorrect syntax near the keyword 'with'. If this statement is a common table …Run Code Online (Sandbox Code Playgroud) sql t-sql sql-server common-table-expression sql-server-2008
可能重复:
T-SQL WHERE col IN(...)
SQL Server查询的最大大小是多少?(字符数)
IN子句的最大大小?我想我看到有关于Oracle有1000项限制的东西,但你可以用ANDing 2 INs来解决这个问题.SQL Server中的类似问题?
更新 那么,如果我需要从另一个系统(非关系数据库)中获取1000个GUID并对SQL Server执行"JOIN in code",那么最佳方法是什么?是否将1000个GUID列表提交给IN子句?还是有另一种技术可以更有效地运作?
我没有测试过这个,但我想知道我是否可以将GUID作为XML文档提交.例如
<guids>
<guid>809674df-1c22-46eb-bf9a-33dc78beb44a</guid>
<guid>257f537f-9c6b-4f14-a90c-ee613b4287f3</guid>
</guids>
Run Code Online (Sandbox Code Playgroud)
然后对Doc和Table做一些XQuery JOIN.效率低于1000项IN条款?
为什么我会收到此错误
Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'.
Run Code Online (Sandbox Code Playgroud)
当我尝试使用sp_executesql?
是否可以在MS SQL Server中获取当前存储过程的名称?可能有任何系统变量或功能GETDATE()吗?
我在数据库DB中有一个表ABC.我想在同一个DB中创建名为ABC_1,ABC_2,ABC_3的ABC副本.如何使用Management Studio(最好)或SQL查询来做到这一点?
这适用于SQL Server 2008 R2.
我创建了一个访问[INFORMATION_SCHEMA].[TABLES]视图的UDF :
CREATE FUNCTION [dbo].[CountTables]
(
@name sysname
)
RETURNS INT
AS
BEGIN
RETURN
(
SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @name
);
END
Run Code Online (Sandbox Code Playgroud)
在Visual Studio中,视图的模式和名称都标有警告:
SQL71502:函数:[dbo].[CountTables]有一个未解析的对象[INFORMATION_SCHEMA]的引用.[TABLES].
我仍然可以毫无问题地发布数据库项目,并且UDF似乎确实正确运行.IntelliSense为我填充了视图的名称,因此它似乎没有问题.
我也尝试将实现更改为使用sys.objects而不是使用此视图,但我也对此视图给出了相同的警告.
我该如何解决此警告?