标签: sql-server

我可以在脚本或存储过程中创建一次性使用函数吗?

在SQL Server 2005中,是否存在在SQL脚本或存储过程中声明的一次性使用或本地函数的概念?我想在我正在编写的脚本中抽象出一些复杂性,但它需要能够声明一个函数.

只是好奇.

sql t-sql sql-server scripting sql-server-2005

98
推荐指数
5
解决办法
9万
查看次数

SQL Server - 何时使用Clustered与非Clustered Index?

我知道集群索引和非集群索引之间的主要区别,并了解它们的实际工作方式.我理解群集和非群集索引如何提高读取性能.但有一件事我不确定是什么原因让我选择一个而不是另一个.

例如:如果一个表没有聚集索引,那么应该创建一个非聚集索引并且有什么好处呢?

sql-server indexing clustered-index query-tuning non-clustered-index

98
推荐指数
1
解决办法
10万
查看次数

如何将exec结果分配给sql变量?

如何在SQL中为变量分配exec调用的结果?我有一个名为的存储过程up_GetBusinessDay,它返回一个日期.

你能做这样的事吗:

exec @PreviousBusinessDay = dbo.up_GetBusinessDay @Date, -1
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server stored-procedures

97
推荐指数
4
解决办法
27万
查看次数

避免在SQL Server中的INSERT INTO SELECT查询中重复

我有以下两个表:

Table1
----------
ID   Name
1    A
2    B
3    C

Table2
----------
ID   Name
1    Z
Run Code Online (Sandbox Code Playgroud)

我需要从数据插入Table1Table2.我可以使用以下语法:

INSERT INTO Table2(Id, Name) SELECT Id, Name FROM Table1
Run Code Online (Sandbox Code Playgroud)

但是,在我的情况下,重复的ID可能存在Table2(在我的情况下,它只是" 1")并且我不想再次复制,因为这会引发错误.

我可以这样写:

IF NOT EXISTS(SELECT 1 FROM Table2 WHERE Id=1)
INSERT INTO Table2 (Id, name) SELECT Id, name FROM Table1 
ELSE
INSERT INTO Table2 (Id, name) SELECT Id, name FROM Table1 WHERE Table1.Id<>1
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法可以不使用IF - ELSE?我想避免INSERT INTO-SELECT基于某些条件的两个陈述.

sql t-sql sql-server sql-insert

97
推荐指数
5
解决办法
30万
查看次数

SQL Server:仅选择MAX行(DATE)

我有一个数据表(db是MSSQL):

    ID  OrderNO PartCode  Quantity DateEntered
    417 2144     44917    100      18-08-11
    418 7235     11762    5        18-08-11
    419 9999     60657    100      18-08-11
    420 9999     60657    90       19-08-11
Run Code Online (Sandbox Code Playgroud)

我想创建一个返回OrderNO,PartCode和Quantity的查询,但仅用于最后一次注册的订单.

从示例表中我想获得以下信息:

     OrderNO PartCode  Quantity     
     2144     44917    100      
     7235     11762    5        
     9999     60657    90      
Run Code Online (Sandbox Code Playgroud)

请注意,订单9999只返回了一行.

谢谢!

sql-server

97
推荐指数
5
解决办法
34万
查看次数

如何使用Sql Server 2008从表中删除前1000行?

我在SQL Server中有一个表.我想从中删除前1000行.但是,我尝试了这个,但我没有删除前1000行,而是删除了表中的所有行.

这是代码:

delete from [mytab] 
select top 1000 
a1,a2,a3
from [mytab]
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-delete

97
推荐指数
4
解决办法
23万
查看次数

SQL NVARCHAR和VARCHAR限制

总之,我有一个很大的(不可避免的)动态SQL查询.由于选择标准中的字段数,包含动态SQL的字符串增长超过4000个字符.现在,我知道有一个4000最大值设置NVARCHAR(MAX),但查看Server Profiler中执行的SQL语句

DELARE @SQL NVARCHAR(MAX);
SET @SQL = 'SomeMassiveString > 4000 chars...';
EXEC(@SQL);
GO
Run Code Online (Sandbox Code Playgroud)

似乎工作(!?),对于另一个同样大的查询,它会抛出一个与此4000限制(!?)相关的错误,它基本上修剪了这个4000限制之后的所有SQL,并且给我留下了语法错误.尽管这样的探查,它表示在这个动态的SQL查询(!?).

究竟发生了什么,我应该将这个@SQL变量转换为VARCHAR并继续使用它吗?

谢谢你的时间.

PS.能够打印超过4000个字符来查看这些大查询也是很好的.以下限制为4000

SELECT CONVERT(XML, @SQL);
PRINT(@SQL);
Run Code Online (Sandbox Code Playgroud)

还有其他很酷的方式吗?

sql sql-server variables string-concatenation sql-server-2008

97
推荐指数
2
解决办法
17万
查看次数

连接字符串中的"服务器"与"数据源"

我是SqlServer的新手,现在我已SqlLocalDb安装在本地工作.很好,但我通常可以看到两个连接字符串,两者都有效:

Data Source=(localdb)\v11.0;Integrated Security=true;
Run Code Online (Sandbox Code Playgroud)

Server=(localdb)\v11.0;Integrated Security=true;
Run Code Online (Sandbox Code Playgroud)

这两者之间究竟有什么区别?

sql-server connection-string sqldatasource localdb

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

如何使用SQL Server截断字符串

我在SQL Server中有大字符串.我想将该字符串截断为10或15个字符

原始字符串

this is test string. this is test string. this is test string. this is test string.
Run Code Online (Sandbox Code Playgroud)

期望的字符串

this is test string. this is ......
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server

97
推荐指数
3
解决办法
20万
查看次数

数据库的事务日志已满

我有一个长时间运行的进程,可以在整个持续时间内保持打开一个事务.

我无法控制执行方式.

由于事务在整个持续时间内保持打开状态,因此当事务日志填满时,SQL Server无法增加日志文件的大小.

因此该过程因错误而失败"The transaction log for database 'xxx' is full".

我试图通过增加数据库属性中的事务日志文件的大小来防止这种情况,但我得到了相同的错误.

不确定我接下来应该尝试什么.这个过程持续了几个小时,因此不容易进行反复试验.

有任何想法吗?

如果有人感兴趣,该过程是组织导入 Microsoft Dynamics CRM 4.0.

有足够的磁盘空间,我们有简单的日志记录模式,并在启动进程之前备份了日志.

- = - = - = - = - UPDATE - = - = - = - = -

感谢所有评论到目前为止.以下是让我相信日志因开放交易而不会增长的原因:

我收到以下错误...

Import Organization (Name=xxx, Id=560d04e7-98ed-e211-9759-0050569d6d39) failed with Exception:
System.Data.SqlClient.SqlException: The transaction log for database 'xxx' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases
Run Code Online (Sandbox Code Playgroud)

所以按照这个建议,我去了" log_reuse_wait_desc column …

sql sql-server dynamics-crm sql-server-2008

97
推荐指数
5
解决办法
29万
查看次数