我有点不高兴,我必须对数据质量很差的数据库执行查询。我正在尝试评估一个包含日期但被定义为nvarchar. 我以为我可以将值转换为整数,但这失败了,因为日期字段中也有非日期值(随机字母和符号等)。
我决定做的事情如下:
SELECT q.foo, cast( q.bar as int)
FROM ( SELECT foo,bar FROM table where ISNUMERIC(bar) = 1) as q
WHERE q.bar > 20140401
Run Code Online (Sandbox Code Playgroud)
但这仍然会导致 nvarchar 值的转换失败'. '。我希望所有值都可以转换为 int,因为它们是数字?
背景故事:
我是一名开发人员,在我的工作站上有一个 SQL Server 2008 的本地实例。我最近刚刚升级了我的主板,发现(令我非常沮丧)旧主板的 RAID 驱动程序显然与新主板不兼容,因此基本上,我无法使用旧主板上的 Windows 实例。幸运的是,我有所有内容的完整备份。
我的问题:
我想在我的新机器上安装 SQL Server 2008,但我想加载旧数据文件。我有很多我不想重新创建的数据库。我拥有所有原始的 MDF 和 LDB,但没有实际的 SQL Server“备份”。
有没有办法做到这一点?
谢谢你的帮助。
我想使用单个INSERT INTO查询将数据添加到多个表,我可以这样做吗?
如果可能,请指导我并提供语法。
我创建了一个包含以下 2 个小表的数据库
这是数据库脚本
USE [Test1July]
GO
/****** Object: Table [dbo].[Hotels] Script Date: 07/01/2014 22:33:33 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Hotels](
[SeqID] [int] IDENTITY(1,1) NOT NULL,
[HotelName] [nchar](25) NULL,
CONSTRAINT [PK_Hotels] PRIMARY KEY CLUSTERED
(
[SeqID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[HotelRooms] Script Date: 07/01/2014 22:33:33 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER …Run Code Online (Sandbox Code Playgroud) 我正在尝试运行一个选择查询,该查询在 where 子句中接收@Sites 变量。目前的查询返回空,因为以下行
AND S.[Name] IN (@Sites)
Run Code Online (Sandbox Code Playgroud)
未按预期处理。下面是查询的摘录:
SET QUOTED_IDENTIFIER OFF
DECLARE @Month int
, @Sites varchar(MAX) = null
SET @Month = 8
SET @Sites = 'Bayside;Collaborative'
SET @Sites = "'" + REPLACE(@Sites,';',"','") + "'"
SELECT
CV.[Id] AS Id
, ...
, S.[Name] AS [Site]
, ...
FROM
[CalendarViews] CV
INNER JOIN [Sites] S ON S.[Id] = CV.[SiteId]
WHERE
MONTH(CV.[DateAllocation]) = @Month
AND S.[Name] IN (@Sites)
ORDER BY
S.[Name]
Run Code Online (Sandbox Code Playgroud)
当我运行查询替换
AND S.[Name] IN (@Sites)
Run Code Online (Sandbox Code Playgroud)
为了
AND S.[Name] IN ('Bayside','Collaborative') …Run Code Online (Sandbox Code Playgroud) 我刚刚继承了一个包含许多表和存储过程的数据库。我用Microsoft SQL Server Management Studio.
一个或多个存储过程更新特定表。我想对所有存储过程进行文本搜索,以查找更新表的过程。
如果原始 SQL 在我们的代码中,我只是grep代码库,但是对于存储过程,我不确定如何搜索所有存储过程。
我还想重命名一些内容并在整个存储过程中进行查找/替换。
是否可以使用Microsoft SQL Server Management Studio?在存储过程中进行搜索和替换?
我在我的 SQL Server 的 tempdb 之一上有一个奇怪的行为。
它有六个 tempdb 文件,根据 SSMS 和查询,都指向 S 目录。他们每个人都有 ~5gb 的初始大小。
奇怪的是 S 是法定人数,实际上只有 2GB 的可用空间。Tempdb 文件根本不存在于 S 及其子目录中。
问题是 tempdb 文件在哪里?:) 我怎样才能看到它们?
谢谢你。
sql-server-2008 sql-server sql-server-2008-r2 sql-server-2012 tempdb
消息 1768,级别 16,状态 0,第 1 行
外键“FK_id”引用了不是用户表的对象“dbo.student”。消息 1750,级别 16,状态 0,行 1
无法创建约束。请参阅以前的错误。
我们有一个大小超过 200GB 的 SQL Server 2008 数据库。服务器上没有磁盘空间来进行备份。我真的需要备份或制作此数据库的另一个副本。实现这一目标的最佳方法是什么?
谢谢
编辑:
我知道这个问题已经结束,但我希望它会对某人有所帮助。
问题出在我们的磁盘( cluster )上。
使用 PerfMon,我可以创建一些计数器(磁盘读取和写入)并且读取计数器固定为 100%。
我看到以下等待sp_WhoIsActive:
PAGEIOLATCH_SH:Database_Name:1(*)
Run Code Online (Sandbox Code Playgroud)
我在这里看到一些帖子,说这个警告是因为高 I/O。SQL Server 联机丛书将 SQL 等待类型 PAGEIOLATCH_SH 定义为:
当任务正在等待 I/O 请求中的缓冲区的闩锁时发生。锁存请求处于共享模式。
和这个:
用户进程将请求一些当前不在缓冲区缓存中的数据。此时——SQL Server 将尝试分配一个缓冲区页——当数据从磁盘移动到缓冲区缓存时,在缓冲区上创建了一个独占的 PAGEIOLATCH_EX。同时从用户进程的角度在缓冲区上创建一个 PAGEIOLATCH_SH。
我创建了索引和统计信息,还使用了 SQL Server Profiler 来帮助我。
有什么办法可以改进查询吗?我怎样才能改进大量的处理ANDs?
我们已经遇到这个问题大约一个星期了,我不知道该怎么办。
SELECT TOP 30 codCliente
FROM (
SELECT t1.CodCliente
, codcampo
, valor
, t1.chavealeat
FROM tblCliente AS t1 WITH(NOLOCK)
INNER JOIN tblClienteDetalhe AS t2 WITH (NOLOCK)
ON t1.codcliente = t2.codcliente
AND CodCampo IN (-1, 4)
WHERE codStatus IN(0)
AND t1.ChavePeriodo < getdate() …Run Code Online (Sandbox Code Playgroud) sql-server-2008 ×10
sql-server ×6
cast ×1
performance ×1
pivot ×1
restore ×1
t-sql ×1
tempdb ×1