如何在一个脚本中从视图生成表结构?只需要数据类型,我正在寻找具有某种类型的动态 sql 的表创建脚本
(1) 可以删除主键/约束,
(2) 不在乎是否添加了 null/not null(但是如果有的话会很好)
我在下面提出了示例问题/答案,请随时对未包含在表中的其他数据类型进行代码审查、编辑/优化,特殊情况/问题/例外可能没有考虑在内。顺便说一下,是否有任何开源代码?
表 1 和 2:
create table dbo.Customer
(
CustomerId int primary key,
CustomerName varchar(255),
ZipCode varchar(9)
)
create table dbo.CustomerTransaction
(
CustomerTransactionId int primary key identity(1,1),
CustomerId int,
SalesAmount numeric (10,2),
PurchaseDate datetime
)
Run Code Online (Sandbox Code Playgroud)
看法:
create view dbo.CustomerTransactionVw
as
select
ct.CustomerTransactionId,
ct.SalesAmount,
ct.PurchaseDate,
cust.CustomerId,
CustomerName,
cust.ZipCode
from dbo.CustomerTransaction ct
inner join dbo.Customer cust
on cust.CustomerId = ct.CustomerId
Run Code Online (Sandbox Code Playgroud)
预期的表创建脚本:
create table dbo.CustomerTransactionBigTable
(
CustomerTransactionId int identity(1,1),
CustomerId int,
SalesAmount numeric (10,2), …Run Code Online (Sandbox Code Playgroud) 我的脚本包含多个GO关键字。我知道 SQLCMD 解释GO为批处理分隔符,因此代码不是作为单个块运行的,而是分隔符(批处理)之间的每个部分单独运行。我的问题是,所有批次都在同一个会话中执行吗?
我尝试使用一个简单的脚本来测试这个:
SELECT @@SPID
GO
SELECT @@SPID
GO
SELECT @@SPID
GO
Run Code Online (Sandbox Code Playgroud)
然后我使用此命令从命令行运行脚本
SELECT @@SPID
GO
SELECT @@SPID
GO
SELECT @@SPID
GO
Run Code Online (Sandbox Code Playgroud)
并得到这个输出:
SQLCMD -S MyServer\Instance -E -i MyScript.sql
Run Code Online (Sandbox Code Playgroud)
它似乎肯定地回答了我的问题,但后来我再次运行脚本并得到完全相同的输出,即所有值都是一样的62。显然,SQLCMD 的两个单独执行不可能在同一个会话中运行,它们只是碰巧收到了相同的会话 ID。但这反过来又让我认为@@SPID单次运行返回的相同值也不一定意味着它是同一个会话。每个批处理都可以在恰好收到相同 ID 的不同会话中执行,类似于 SQLCMD 的不同执行在具有相同 ID 的不同会话中运行的方式。
因此,我的问题仍然存在:是否在同一会话中在 SQLCMD 中执行了多个批次的相同脚本?有没有办法确定这一点?
我目前正在为一家保险公司进行数据库设计。示例实体是“客户”、“地址”、“车辆”、“建筑物”等。所以有很多关系,每个关系都有一些上下文。例如,客户车辆:客户可以是车辆的所有者、司机、承租人……基本上我看到两种处理方式:
(1):每个关系的连接表,带有两个外键和一个上下文 ID。这将导致许多联结表,其中部分数据很少。由于表的数量,选择会有点困难。
(2):整个数据库的一个连接表。该表将包含两个外键,一个是关于它是什么关系的键(例如客户-车辆)和一个用于上下文的键。这将导致一个巨大的连接表,但也更简单的选择。
哪个是更好的解决方案?有什么主要的优点/缺点,甚至是我没有想到的其他解决方案吗?
感谢您的帮助。如果我表达的不够清楚或有什么不明白的地方,请提问。(英语不是我的母语)
我有挑战!我需要从 4 个不同服务器的 4 个不同表中进行选择。
例子:
Select * from server1.tableS1.sys.view
Select * from server2.tableS2.sys.view
Select * from server3.tableS3.sys.view
Select * from server4.tableS4.sys.view
Run Code Online (Sandbox Code Playgroud)
如何在同一个查询中进行选择?
我和我的团队有一个问题,我们需要能够识别阻塞其他进程并杀死它们的进程。有大量脚本可免费用于执行这些操作。我们尝试了各种方法并仔细检查了代码。(如果您是发布了这些查询之一的人,谢谢!)
在我进一步讨论之前,让我告诉您这是针对我们无法修改的供应商应用程序。供应商也不愿意花时间找出进程被阻塞的原因。此时我们唯一的选择是终止长时间运行的进程(如供应商支持所建议的那样)。在终止这些进程之前,我们确实检查了正在运行的查询,但在 99.9% 的情况下,它显示为FETCH API_CURSOR00000000000A7E1F,这告诉我们什么都没有。
到目前为止,这一直是一个手动过程。现在,我们希望自动杀死这些长时间运行的阻塞进程,而不是有人手动杀死它们。
我们想在将它投入生产之前测试这个脚本。我们需要一些帮助来创建一个有意创建阻塞进程的脚本。我们已经尝试在 TEST 环境中使用此应用程序,但不幸的是,我们没有成功复制阻塞进程。
提前感谢你的帮助!
请帮助我,删除“使用临时”。我尝试了许多不同的选择,无法摆脱。或排序消失或出现“使用临时”。;(
分类表:
`product_category_multi` (
`m_Id` mediumint(7) NOT NULL,
`prod_Id` smallint(6) unsigned NOT NULL,
`multi_cat` mediumint(7) unsigned NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)
索引表:
ALTER TABLE `product_category_multi`
ADD PRIMARY KEY (`m_Id`),
ADD KEY `multi_cat` (`multi_cat`),
ADD KEY `Id` (`prod_Id`);
Run Code Online (Sandbox Code Playgroud)
示例内容表:
m_Id prod_Id multi_cat
-------+-----------+---------+
1 1 5
2 1 1
3 1 6
4 2 5
5 2 1
6 3 5
7 4 5
8 4 6
Run Code Online (Sandbox Code Playgroud)
产品表:
`shop_product` (
`Id` int(10) unsigned NOT NULL,
`product_article` varchar(20) NOT NULL,
`product_article_main` …Run Code Online (Sandbox Code Playgroud) 当我打开 SQL Server Management Studio 时,它只连接到单个数据库服务器,但我希望它自动连接到多个数据库服务器。
我怎样才能做到这一点?
我在我的笔记本电脑 ( testlab )上安装了 AlwaysOn和三个虚拟机,其中一个是域控制器,两个托管 SQL Server 实例(计划作为一个主副本和一个辅助副本)。一切都很顺利,直到我想将辅助副本添加到可用性组。
请找到随附的屏幕截图。我已经在 TCP/IP 设置中将端口更改为 1433,并且还在 Windows 防火墙中为 SQL Server 添加了一个例外。两台服务器都在同一个集群网络中。不知道我在这里还缺少什么。
我有一个包含数亿行的大型平面文件。我只想插入其中的前 1000 个。我怎样才能做到这一点?
我有一张这样的表:
id | t1 | t2
---------------
1 | a | b
2 | c | a
3 | a | e
4 | f | g
5 | c | c
Run Code Online (Sandbox Code Playgroud)
我想比较列t1并t2相互比较以删除匹配值并在每列中获取唯一值,如下所示:
t1 | t2
-----------
a | b
c | null
null | e
f | g
null| null
Run Code Online (Sandbox Code Playgroud)
选择哪一行显示值以及其他哪一行显示空值并不重要。例如,由于a在原始数据集的第 3 行中也找到了值,因此以下输出也将有效:
t1 | t2
-----------
null | b
c | null
a | e
f | g
null| null
Run Code Online (Sandbox Code Playgroud)
最终目标是在两列中显示所有不同的值并且没有相同的值。