我有几个 SQL Server(2008 向前)和 Oracle(12c 向前)遗留数据库在服务器上运行......我知道一个事实,各种存储过程指向其他数据库,比如,这使得数据库依赖select * from OtherDB.mySchema.Products
于OtherDB
......
有没有一种简单的方法来映射这种“相互依赖性”,最好是生成图表?
我有几个 SQL Server(2008 向前)和 Oracle(12c 向前)遗留数据库在服务器上运行......我知道一个事实,各种存储过程指向其他数据库,比如,这使得数据库依赖select * from OtherDB.mySchema.Products
于OtherDB
......
有没有一种简单的方法来映射这种“相互依赖性”,最好是生成图表?
我需要在单个查询中将数据插入 3 个表
表技能数据
用户索引 | 技能点 | 总技能 |
---|---|---|
1个 | 5202 | 99 |
表徽
用户索引 | 伯爵会徽 | 地位 |
---|---|---|
1个 | 1265 | 1个 |
餐桌奖励
用户索引 | 等级 | 代码 |
---|---|---|
1个 | 99 | 1005 |
我有一个sql查询如下:
select * from Txn_Master
where Txn_Type = 'TPD' and
Txn_Date = Getdate()
order by Txn_ID DESC
但是在这个 sql-server 查询中,当我手动输入日期(如“01/06/2023”)时,它会在表中显示数据,但每当我输入 getdate() 函数以自动获取当前日期时,它不显示任何数据,只显示空白表
我想在我的表中插入一个数据行,名称为:DSKWOR00,但出现此错误:
字符串或二进制数据将被截断。
所以我关闭了 ANSI_WARNINGS 并插入了行但结果不是我的值
这是我的 T-SQL :
1 - 创建我的表:
CREATE TABLE [dbo].[DSKWOR00]( [DSW_ID] [nvarchar](10) NULL, [DSW_YY] [float] NOT NULL, [DSW_MM] [float] NOT NULL, [DSW_LISTNO] [nvarchar](12) NULL, [DSW_ID1] [nvarchar](8) NULL, [DSW_FNAME] [nvarchar](60) NULL, [DSW_LNAME] [nvarchar](60) NULL, [DSW_DNAME] [nvarchar](60) NULL, [DSW_IDNO] [nvarchar](15) NULL, [DSW_IDPLC] [nvarchar](30) NULL, [DSW_IDATE] [nvarchar](8) NULL, [DSW_BDATE] [nvarchar](8) NULL, [DSW_SEX] [nvarchar](3) NULL, [DSW_NAT] [nvarchar](10) NULL, [DSW_OCP] [nvarchar](50) NULL, [DSW_SDATE] [nvarchar](8) NULL, [DSW_EDATE] [nvarchar](8) NULL, [DSW_DD] [float] NULL, [DSW_ROOZ] [float] NULL, [DSW_MAH] [float] NULL, [DSW_MAZ] [float] NULL, [DSW_MASH] [float] NULL, [DSW_TOTL] [float] NULL, [DSW_BIME] [float] NULL, [DSW_PRATE] [float] NULL, [DSW_JOB] [nvarchar](6) NULL, [PER_NATCOD] [nvarchar](10) NOT NULL, CONSTRAINT [PK_DSKWOR00] PRIMARY KEY CLUSTERED( [DSW_YY] ASC, [DSW_MM] ASC, [PER_NATCOD] Asc ) ON [PRIMARY]) ON [PRIMARY]
2 - 在我的表中插入一行:
INSERT INTO dbo.DSKWOR00
(DSW_ID,DSW_YY,DSW_MM,DSW_LISTNO,DSW_ID1,DSW_FNAME,DSW_LNAME,DSW_DNAME,DSW_IDNO,DSW_IDPLC,DSW_IDATE,DSW_BDATE,DSW_SEX,DSW_NAT,DSW_OCP,DSW_SDATE,DSW_EDATE,DSW_DD,DSW_ROOZ,DSW_MAH,DSW_MAZ,DSW_MASH,DSW_TOTL,DSW_BIME,DSW_PRATE,DSW_JOB,PER_NATCOD)
VALUES
('6773790024',1401,1,1,'80079349','¤ç¬ üóä','ö‘þõþîž','‘®¤þóä','1011','¢¥þ','0','¢¤õ','ü÷¤þ',' ñõ‘ä ¤þ¢õ',0,0,'0','0','0','0','0','0','0','0',0,'OZ0509','4430928460')
3 - 如果我使用 ANSI_WARNINGS ON 插入错误:
Msg 8152, Level 16, State 30, Line 3
String or binary data would be truncated.
--Note: My insert is correct I don't know why I'm seeing this error
4 - 所以为了修复错误,我这样做了:
SET ANSI_WARNINGS OFF
INSERT INTO dbo.DSKWOR00
(DSW_ID,DSW_YY,DSW_MM,DSW_LISTNO,DSW_ID1,DSW_FNAME,DSW_LNAME,DSW_DNAME,DSW_IDNO,DSW_IDPLC,DSW_IDATE,DSW_BDATE,DSW_SEX,DSW_NAT,DSW_OCP,DSW_SDATE,DSW_EDATE,DSW_DD,DSW_ROOZ,DSW_MAH,DSW_MAZ,DSW_MASH,DSW_TOTL,DSW_BIME,DSW_PRATE,DSW_JOB,PER_NATCOD)
VALUES
('6773790024',1401,1,1,'80079349','¤ç¬ üóä','ö‘þõþîž','‘®¤þóä','1011','¢¥þ','0','¢¤õ','ü÷¤þ',' ñõ‘ä ¤þ¢õ',0,0,'0','0','0','0','0','0','0','0',0,'OZ0509','4430928460')
SET ANSI_WARNINGS ON
5 -最后我的行将插入,但它不是我插入表中的值!
---- My Values in Inser : ('6773790034',1401,1,1,'80069349','¤ç¬ üóä','ö‘þõþîž','‘®¤þóä','1011','¢¥þ','0','¢¤õ','ü÷¤þ',' ñõ‘ä ¤þ¢õ',0,0,'0','0','0','0','0','0','0','0',0,'OZ0509','4430928444')
---- What did Insert : 6773790034 1401 1 1 80069349 ¤ç¬? ü?? ?‘???î? ‘®¤??? 1011 ¢¥? 0 ¢¤? ü÷? ??‘? ¤?¢? 0 0 0 0 0 0 0 0 0 0 0 OZ0509 4430928444
我想在我的表中防止删除、插入、更新和选择的并发,所以我尝试SERIALIZABLE
在事务之前使用表,但这并没有为其他进程锁定表!如何解决?
我尝试了什么:
1- 创建 Table_1
--Create Sample Table
CREATE TABLE [dbo].[Table_1](
[Number] [bigint] NOT NULL,
[Price] [bigint] NULL,
CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED
(
[Number] 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
INSERT [dbo].[Table_1] ([Number], [Price]) VALUES (1, 1000)
GO
INSERT [dbo].[Table_1] ([Number], [Price]) VALUES (2, 3000)
GO
INSERT [dbo].[Table_1] ([Number], [Price]) VALUES (3, 8000)
GO
2- 延迟查询会话一:
--SESSION 1
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
WAITFOR DELAY '00:00:10.000'
UPDATE Table_1 SET Price = 6000 WHERE NUMBER = 1
SELECT * FROM Table_1
COMMIT TRANSACTION;
3-查询会话二,这个查询最多等待会话一直到结束进程,但事实并非如此!:
--SESSION 2
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
SELECT * FROM Table_1
COMMIT TRANSACTION;
我最近交换了数据库服务器(将数据库从旧恢复到新然后交换 IP)......
旧:Sql Server 2005、Windows Server 2003 新:Sql Server 2008、Windows Server 2012
从地理位置附近的 VPN 连接到服务器(点网网站、PHP、vbscript、mssql)的所有进程在新服务器上都可以正常工作。
但是我们在服务器(英国)和卫星办公室(美国肯塔基州)之间有一个 VPN,还有一个在 Microsoft Access 上运行的数据库应用程序,当在新服务器上执行查询时,这个应用程序会抛出一个错误。错误是......
错误:ODBC--调用失败。
[Microsoft][ODBC SQL Server 驱动程序][DBNETLIB]ConnectionRead (recv())。(#10054) [Microsoft][ODBC SQL Server Driver][DBNETLIB]一般网络错误。检查您的网络文档。(#11)
如果我暂时让此应用程序查询旧服务器(通过更改本地主机文件),则不会发生错误并且一切正常。
为了帮助解决这个问题,我构建了一个小脚本......
'ConString="Provider=SQLOLEDB;Data Source=172.17.201.11,1433;" & _
' "OLE DB Services=-2;Initial Catalog=Perf;Network=DBMSSOCN;User Id=*;Password=*"
ConString="Provider=SQLOLEDB;Data Source=172.17.201.11,1433;" & _
"Initial Catalog=Perf;Network=DBMSSOCN;User Id=*;Password=*"
set conn = CreateObject("ADODB.Connection")
Conn.connectiontimeout=500
Conn.commandtimeout=500
conn.open ConString
SCRIPTTIMEOUT = 1000
'sqlstring="SELECT top 100 ClientID FROM Clients"
sqlstring="SELECT top 1000 ClientID FROM Clients"
'sqlstring="SELECT ClientID FROM Clients"
'succeeds with top 100
'fails with top 1000 or no limit
set Rcount = Conn.Execute(sqlstring)
msgbox Rcount(0)
Rcount.Close
set Rcount = Nothing
set sqlstring = Nothing
Conn.Close
set Conn = Nothing
如果我查询 100 行,则该脚本有效。如果我尝试 1000,它每次都会失败(我还没有尝试过中间数量,但我认为缩小范围没有多大意义)
如果我将 IP 地址切换到旧服务器,该脚本将起作用(其他一切都相同 - 相同的 vpn,相同的客户端,相同的脚本)
脚本和访问应用程序通过不同的 VPN(也英国)在各个方面都可以正常工作
OLE DB Services=-2
。我已经尝试过Encrypt=on
(并且关闭)。我已经尝试过Trusted_connection=on
(并且关闭)。我已经尝试过Pooling=on
(并且关闭)。我有尝试在 IP 之后指定实例名称。两台服务器都在同一个物理机架中,在同一个网络/子网上,连接到同一个物理交换机。
在我走上弄乱VPN设置的路线之前,交换电线(需要访问DC)我可以/应该做/看看新服务器上的帮助吗?
编辑: 如果我添加Packet Size=1024;
到我的连接字符串,它就可以工作!问题是,两台服务器都默认设置为 4096,而旧服务器可以正常工作。
编辑 2以上适用于我的测试脚本,但不适用于访问应用程序。
我希望找到一种不需要更改连接字符串的解决方法,因为这会很麻烦(涉及访问应用程序的开发人员)
我正在尝试使用安装在 Windows 7 Pro 32 位 PC 上的 SQL Server 2008(不是 2008 r2,只是 2008)做一些工作。它只是没有应用 Service Pack 1 的 Windows 7。我没有更新PC的选项,只能按现在的样子使用它。
我正在尝试找到将安装在这台 PC 上的 SQL Server Management Studio 版本。有人知道吗?
我尝试了 v17.9.1,但我收到一条错误消息,说需要 Win 7 SP1。不幸的是,我没有安装 SP1 的选项,并且计算机也无法访问互联网。
DID 在普通 Windows 7 上安装的最后一个版本是什么?
干杯。
在 product ion 中,我们在 2 台服务器之间进行事务复制,其中一个数据库中的数据从服务器 A 传输到服务器 B。我们现在想在短时间内添加另一台服务器 C,并使从服务器 A 到服务器 C 的复制正常工作。简而言之,服务器 A 的一个数据库同时将一种方式复制到服务器 B和服务器 C。在 SQL2008 标准版中可以吗?如果是,那么哪种类型的复制会起作用?
我发现数据库兼容性级别之间的一段代码的行为存在差异,并想知道这是什么原因。下面是一个简单的示例,它遍历一个计数表并ROWCOUNT
在第 50 次迭代时更改选项:
设置:
/* Create tally table */
SELECT TOP 100
ROW_NUMBER() OVER (ORDER BY a.object_id) AS Number
INTO #Tally
FROM sys.objects a
CROSS JOIN sys.objects b;
/* Create Some databases with different compatibility levels */
CREATE DATABASE [100Compat] WITH COMPATIBILITY_LEVEL = 100
CREATE DATABASE [110Compat] WITH COMPATIBILITY_LEVEL = 110
CREATE DATABASE [120Compat] WITH COMPATIBILITY_LEVEL = 120
CREATE DATABASE [130Compat] WITH COMPATIBILITY_LEVEL = 130
受影响的代码:
/* cursor through the tally table */
DECLARE MyCursor CURSOR
FOR
SELECT Number
FROM #Tally
FOR READ ONLY;
DECLARE @num INT;
OPEN MyCursor
FETCH MyCursor
INTO @num
WHILE @@FETCH_STATUS = 0
BEGIN
SET ROWCOUNT 0
/* change the value for ROWCOUNT on iteration 50 */
IF @num = 50 SET ROWCOUNT 1
PRINT @num
FETCH MyCursor
INTO @num
END
SET ROWCOUNT 0
CLOSE MyCursor
DEALLOCATE MyCursor
如果我对它运行上述内容,[100Compat]
则会在消息窗口中打印数字 1-100。
如果我针对 运行上述操作[110Compat]
,[120Compat]
或者[130Compat]
我可以在消息窗口中看到值 1-50 和错误消息
消息 16958,级别 16,状态 3,第 41 行无法完成游标操作,因为自声明游标后设置选项已更改。
导致这种行为变化的两种兼容模式之间有什么区别?是否有在 110 中启用/禁用的跟踪标志或类似的东西?
我看过这篇文章,但似乎没有什么明显的原因导致差异