小编Kin*_*han的帖子

使用动态sql在指定的数据库中创建视图?

我正在编写一个动态 sql 以在不同的数据库中删除和创建视图。

所以我写道:

set @CreateViewStatement = 
                '
                USE ['+ @DB +'];
                CREATE VIEW [dbo].[MyTable]
                AS

                SELECT ........something
exec (@CreateViewStatement)
Run Code Online (Sandbox Code Playgroud)

它给了我错误:

'CREATE VIEW' 必须是查询批处理中的第一条语句。

如果我删除 USE DATABASE 语句,它可以正常工作,但是不再指定数据库....

我怎么解决这个问题?

sql-server-2005 sql-server dynamic-sql

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

SQL Server 有 Date_Format 函数吗?

我发现的只是一个DateFormat我可以选择的预定义列表,就像这样

我记得在 MySQL(还有 PostgeSQL?)你可以定义你的日期格式:

DATE_FORMAT(now(),'&m_%Y') --for 02_2012 etc.
Run Code Online (Sandbox Code Playgroud)

SQL Server 有同样的东西吗?我看到人们必须编写一个函数来做这样的事情,它有内置的吗?


编辑:

我刚刚找到了这个DatePart功能。它可以以月份为数字,但总是返回 1 位数字,即使我使用 datePart(MM, getdate())

sql-server-2005 sql-server date-format datetime

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

有人可以解释为什么使用 nolock 进行选择会查询更新的数据吗?

我正在阅读这里的答案(来自stackoverflow,我认为应该在这里提问)

NOLOCK 意味着根本不放置锁。

您的查询可能会在单个查询中返回 UPDATE 之前的部分数据和 UPDATE 之后的部分数据。

我知道 nolock 不会锁定表,所以其他人可以同时查询。

从它显示的答案和示例来看,它在数据更新时获取数据。

为什么会这样?

我假设对于普通选择,它会尝试在表上加锁,因此当执行更新语句时,它会在行或页上加锁。然后当我尝试运行 select 语句时,它无法放置锁,直到更新语句锁被释放。

但是在这种情况下因为select语句不会尝试给表加锁,所以它可以运行而无需等待update语句释放锁?

sql-server select nolock

4
推荐指数
1
解决办法
6699
查看次数