作为" 什么是索引以及如何使用它们来优化我的数据库中的查询? " 的后续内容,我试图了解索引,哪些列是好的索引候选者?专门针对MS SQL数据库?
经过一些谷歌搜索,我读过的所有内容都表明,通常增加和唯一的列会产生一个很好的索引(比如MySQL的auto_increment),我理解这一点,但我使用的是MS SQL,我使用GUID作为主键,所以看来索引不会使GUID列受益......
我在内部服务器上执行数据库备份时过于宽松.
是否有一个简单的命令行程序,我可以用它来备份SQL Server 2005中的某些数据库?或者有一个简单的VBScript?
在SQL Server中使用存储过程执行动态SQL命令的真实优点和缺点是什么?
EXEC (@SQL)
Run Code Online (Sandbox Code Playgroud)
与
EXEC SP_EXECUTESQL @SQL
Run Code Online (Sandbox Code Playgroud)
?
我正在简化复杂的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()吗?
我使用SQL Server 2008 R2 Standard(版本10.50.1600.1)作为我的生产网站,使用SQL Server Express版本和Advanced Services(v10.50.1600.1)作为数据库.
几天后我的SQL Server崩溃了,我不得不在我的localhost上安装一个新的2008 R2 Express版本.当我恢复从Express版本中获取的一些旧版本时,它工作正常,但是当我尝试.bak从生产服务器中恢复的文件中恢复数据库时,它会导致以下错误:
错误:指定的演员表无效.(SqlManagerUI)
当我尝试使用命令恢复数据库时
Use Master
Go
RESTORE DATABASE Publications
FROM DISK = 'C:\Publications.bak'
WITH MOVE 'Publications' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.mdf',--adjust path
MOVE 'AlPublications_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.ldf'
Run Code Online (Sandbox Code Playgroud)
它会产生不同的错误
消息3154,级别16,状态4,行1
备份集保存除现有"发布"数据库之外的数据库的备份.
消息3013,级别16,状态1,行1
RESTORE DATABASE异常终止.
我已经交叉检查了版本.它们似乎都与我匹配,如下图所示
以前我能够将数据库从标准版恢复到快速版,但现在它失败了.我删除了数据库并尝试重新创建它.那也失败了.
我不确定我做错了什么.我很感激这方面的帮助
问题已解决,因为.bak文件似乎已损坏.当我用不同的文件尝试它时,它工作.
我创建了一个访问[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-server ×10
sql ×5
t-sql ×5
backup ×1
command-line ×1
database ×1
dynamic ×1
dynamic-sql ×1
indexing ×1
limits ×1
optimization ×1
scripting ×1
sqldatatypes ×1
types ×1