标签: t-sql

T-SQL获取存储过程的SELECTed值

在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)

(我知道上面的语法是不允许的,因为我试过了!)

t-sql select stored-procedures

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

什么是SQL Server中的PAGEIOLATCH_SH等待类型?

我有一个在交易过程中需要很长时间的查询.当我得到wait_type它的过程时PAGEIOLATCH_SH.

这种等待类型是什么意思,如何解决?

t-sql sql-server optimization

92
推荐指数
2
解决办法
20万
查看次数

使用T-SQL生成MD5哈希字符串

有没有办法生成类型为varchar(32)的MD5哈希字符串,而不使用fn_varbintohexstr

SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'email@dot.com')), 3, 32)
Run Code Online (Sandbox Code Playgroud)

所以它可以在带有SCHEMABINDING的视图中使用

t-sql sql-server sql-server-2008

92
推荐指数
6
解决办法
22万
查看次数

SQL更新查询中的聚合函数?

我正在尝试将一个表中的值设置为另一个表中的值的总和.这些方面的东西:

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.

我应该知道这一点,但我的想法是空白的.我究竟做错了什么?

sql t-sql sql-server

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

如何在单个SELECT语句中使用多个公用表表达式?

我正在简化复杂的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

90
推荐指数
2
解决办法
6万
查看次数

SQL Server查询的最大大小?IN子句?有更好的方法吗?

可能重复:
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条款?

sql t-sql sql-server limits

90
推荐指数
4
解决办法
17万
查看次数

为什么我得到"过程期望'ntext/nchar/nvarchar'类型的参数'@statement'." 当我尝试使用sp_executesql?

为什么我会收到此错误

Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'.
Run Code Online (Sandbox Code Playgroud)

当我尝试使用sp_executesql?

sql t-sql sql-server dynamic-sql

90
推荐指数
2
解决办法
11万
查看次数

当前执行的程序名称

是否可以在MS SQL Server中获取当前存储过程的名称?可能有任何系统变量或功能GETDATE()吗?

t-sql sql-server stored-procedures sql-server-2008

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

SQL Server - 创建数据库表的副本并将其放在同一个数据库中?

我在数据库DB中有一个表ABC.我想在同一个DB中创建名为ABC_1,ABC_2,ABC_3的ABC副本.如何使用Management Studio(最好)或SQL查询来做到这一点?

这适用于SQL Server 2008 R2.

sql t-sql sql-server-2008 sql-server-2008-r2

90
推荐指数
4
解决办法
13万
查看次数

未解析的对象引用[INFORMATION_SCHEMA].[TABLES]

我创建了一个访问[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而不是使用此视图,但我也对此视图给出了相同的警告.

我该如何解决此警告?

sql t-sql sql-server sql-server-data-tools

90
推荐指数
2
解决办法
5万
查看次数