标签: sql-server

如何从SQL Server数据库中获取最近添加的存储过程的列表

是否有可能从SQL Server数据库获取存储过程的列表,其中创建/上次更新日期>昨天?

sys.sql_modules似乎没有约会.它必须存储在其他地方.

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

7
推荐指数
4
解决办法
5657
查看次数

如何对按字母顺序排列的文本字段进行排序?

我有几个需要排序的记录,但字段是varchar.他们使用AZ的英文字母.Z之后它来自AA,AB,AC等...例如:

CREATE TABLE #foo(x VARCHAR(30));

INSERT #foo(x) SELECT 'A'
UNION SELECT 'AA'
UNION SELECT 'Z'
UNION SELECT 'B'
UNION SELECT 'AB'
UNION SELECT 'BB';
Run Code Online (Sandbox Code Playgroud)

我想要的结果是:

A
B
Z
AA
AB
BB
Run Code Online (Sandbox Code Playgroud)

我知道我应该使用数字字段并按此排序,但目前我没有这个选项.我正在使用SQL Server,而前端是在Access 2010中的报表上.

sql-server ms-access

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

来自窗口函数子句的SQL Server的奇怪不一致行为?

在提出另一个问题时,我发现SQL Server(在2005年和2008年都发生过)在处理CASE窗口函数子句中的语句时似乎有奇怪的不一致行为.以下代码给出了错误:

declare @t table (SortColumn int)
insert @t values (1), (2), (3)
declare @asc bit
set @asc = 0

select  row_number() over (order by
            case when 1=1 then SortColumn end asc,
            case when 1=0 then SortColumn end desc) RowNumber
,       *
from    @t
Run Code Online (Sandbox Code Playgroud)

错误是窗口函数不支持常量作为ORDER BY子句表达式. 我认为这是因为case语句可以评估为NULL,这是一个常量.正如可能预期的那样,此代码也会出现相同的错误:

declare @t table (SortColumn int)
insert @t values (1), (2), (3)
declare @asc bit
set @asc = 0

select  row_number() over (order by
            NULL …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

7
推荐指数
1
解决办法
1129
查看次数

使用DROP和CREATE一次编写所有Sprocs脚本

SQL Server 2008

目标:生成用于创建已在DB中的sprocs的脚本.每个文件必须是一个脚本.

我知道我可以直接右键单击数据库和"任务>生成脚本",但这不会编写我想要的模板中的sproc脚本.

我需要在您从对象资源管理器中右键单击sproc并将"脚本存储过程为> DROP和CREATE"时获得的相同模板中编写脚本.

这是通过'Tasks> Generate Scripts'得到类似版本的,但主要区别是'Tasks> Generate Scripts'方法通过dbo.sp_executesql命令创建脚本,因为你不能嵌套CREATE PROCEDURE一个IF块的内部

任务>生成生成此:

USE someDB
GO

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'somesproc') AND type in (N'P', N'PC'))
DROP PROCEDURE someSproc
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'someSproc') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'-- =============================================
CREATE PROCEDURE 
AS
BEGIN

END
' …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server sql-server-2008

7
推荐指数
1
解决办法
7820
查看次数

SQL Server上不可靠的information_schema架构信息?

SQL Server文档在这里说,该table_schema领域information_schema.tables是"不可靠",并且得到一个对象的架构的正确方法是查询sys.objects.

任何人都可以详细说明报告的架构如何以及何时information_schema.tables可能不正确?

sql-server information-schema

7
推荐指数
1
解决办法
2580
查看次数

什么是T-SQL语句块?

在研究我可以在MSDN文章中做的事情时说:

从查询或过程无条件退出.RETURN是立即完成的,可以在任何时候用于退出过程,批处理或语句块.不执行RETURN之后的语句.

文档没有接近我正在研究的具体情况.阅读之后,我意识到我不理解Return语句,并且(更具体地说)" 语句块 " 的定义以及我认为.所以...

究竟什么是t-sql"语句块"?它们是Begin ... End用C#中的括号定义的{ ... },还是完全不同的东西?

谢谢!

t-sql sql-server return

7
推荐指数
1
解决办法
3031
查看次数

什么是VertiPaq及其工作原理

我正在学习Column Store索引(Denali CTP3功能)并且知道它使用VertiPaq架构进行数据压缩.我有兴趣知道它是什么,它是如何工作的,它的架构.我在谷歌检查但没有令人满意的结果.任何人都可以详细告诉我它是什么,它是如何工作的,这背后的算法/架构等等.

以及它如何帮助进行数据压缩

sql t-sql sql-server sql-server-2012

7
推荐指数
1
解决办法
9379
查看次数

完全外连接在一个标准上,内连接在另一个标准上

我需要将HeaderDetail行连接到一个结果集中:

(样本DDL并inserts遵循):

订单:

OrderID  OrderDate                CurrencyID  BuyAmount  BuyRate 
=======  =======================  ==========  =========  ========
1        2011-09-01 15:57:00.000  7           12173.60   1.243893
1        2011-09-01 15:57:00.000  9           69.48      1
Run Code Online (Sandbox Code Playgroud)

订单详细信息:

OrderID  CurrencyID  SellAmount  SellRate
=======  ==========  ==========  ========
1        7           10000       1
1        8           12384       0.9638
Run Code Online (Sandbox Code Playgroud)

我希望他们加入OrderID并且CurrencyID:

OrderID  CurrencyID  BuyAmount  BuyRate   SellAmount  SellRate
=======  ==========  =========  ========  ==========  ========
1        7           12173.60   1.243893  10000       1
1        8           NULL       NULL      12384       0.9638
1 …
Run Code Online (Sandbox Code Playgroud)

sql-server full-outer-join

7
推荐指数
1
解决办法
271
查看次数

Soundex函数如何在SQL Server中运行?

以下是SQL中Soundex代码的示例:

SELECT SOUNDEX('Smith'), SOUNDEX('Smythe');
----- ----- 
S530  S530  
Run Code Online (Sandbox Code Playgroud)

怎么'Smith'变成S530

在这个例子中,第一个数字是S因为这是输入表达式中的第一个字符,但是如何计算剩余的三个数字?

sql sql-server soundex

7
推荐指数
2
解决办法
2316
查看次数

如何正确嵌套CTE

很少有人问过这个问题,但我仍然无法找到正确的答案或正确的方法来做到这一点:

...

;WITH CTE AS
(
  SELECT * FROM ...
)
SELECT *, [dbo].[udf_BetaInv](A, B, C, D) AS 'Loss'
FROM CTE
WHERE (Loss >= @MinRetention)
Run Code Online (Sandbox Code Playgroud)

这不起作用,我无法创建存储过程,显然我不能在WHERE中使用Loss,因为在该范围内不存在.

我想用另一个CTE来包装这个,所以我可以把WHERE放在外面的那个但是似乎不起作用,试过这个:

;WITH CTE AS
(
  SELECT * FROM ...
)
SELECT *, [dbo].[udf_BetaInv(A, B, C, D) AS 'Loss'
FROM CTE,
RESULTS AS
(SELECT * FROM CTE)
  SELECT *
  FROM RESULTS
  WHERE (Loss >= @MinRetention)
Run Code Online (Sandbox Code Playgroud)

但它没有在SQL Server中编译,我得到一个错误,'''错误地放在上面的许多行但没有任何关系,如果我删除第二个CTE它工作正常.

我只想避免代码重复,不想在select和in中调用我的[udf_BetaInv]两次.

sql-server

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