我试图将数据存储在一个表变量中@coordinates,该变量包含 2 行和 2 列:纬度和经度。
存储价值:
declare @coordinates table(latitude decimal(12,9), longitude decimal(12,9))
insert into @coordinates select latitude, longitude from loc.locations where place_name IN ('Delhi', 'Mumbai')
Run Code Online (Sandbox Code Playgroud)
查看值:
select * from @coordinates
Run Code Online (Sandbox Code Playgroud)
结果:
latitude longitude
28.666670000 77.216670000
19.014410000 72.847940000
Run Code Online (Sandbox Code Playgroud)
但我想一一访问这些值,例如:@coordinates[1][1] 或 @coordinates.latitude[1]
或任何可能的简单方法?
我没有构建它,但我们有一个 32 位的 Windows Server 2008,带有 SQL Server 2008 和 4GB 的 RAM。
我需要将它升级到 SQL Server 2016,以便将日志传送到新服务器,这样我们就可以摆脱困境。
问题 - 看起来 SQL Server 2016 至少需要 Windows Server 2012,它只有 64 位。
问题:如何将数据迁移到 SQL 2016 服务器,停机时间小于 1 天?
有没有办法通过兼容性级别来解决它?
我想创建一个 SQL 作业并发送包含多个选择语句的电子邮件,包括查询结果。是否可以使用 SQL Job 或者我应该使用 SSIS?
编辑1:
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Adventure Works Administrator',
@recipients = '****@abc.com',
@Execute_query_database = 'AdventureWorks',
@query = 'SELECT COUNT(*) FROM AdventureWorks.Production.WorkOrder
WHERE DueDate > '2018-03-30'
AND DATEDIFF(dd, '2004-04-30', DueDate) < 2
SELECT * FROM NorthWind.Production.Work
WHERE DueDate > '2018-04-30'
' ,
@subject = 'Work Order Count',
@attach_query_result_as_file = 1 ;
Run Code Online (Sandbox Code Playgroud)
错误消息:文件附件或查询结果大小超过了 1000000 字节的允许值。
编辑 2:我觉得 SQL 代理作业没有指向所需的数据库,并且 sp_send_email 没有数据库名称。所以我添加了@Execute_query_database = 'AdventureWorks'但仍然没有改进,因为在 SQL SELECTS 中使用了两个不同的数据库。
有什么想法吗?
我试图在存储过程中设置一个输出参数,但我认为当我回滚事务时,我认为我也将分配回滚到@out. 那是对的吗?
如果是这样,我如何返回消息并回滚事务?我正在@out从 C#获取参数。
create PROCEDURE [dbo].[sp]
@out varchar(2000) output
AS
BEGIN
SET NOCOUNT ON
BEGIN TRANSACTION
BEGIN TRY
SET @OUT = "success";
COMMIT TRANSACTION
END TRY
BEGIN CATCH
set @out = 'not success';
ROLLBACK TRANSACTION
END CATCH
END
Run Code Online (Sandbox Code Playgroud)
我原本是在做一个
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage;
Run Code Online (Sandbox Code Playgroud)
...但这没有帮助,尽管我更喜欢这种方法。
sql-server stored-procedures error-handling ssdt sql-server-2016
晚上 10 点,我安排了一个 SQL 代理作业,按照时间表进行每日备份:
现在,当我检查我的备份集时(假设在 22:30),我看到差异备份已经发生,而没有任何完整备份!!。
我没想到会在明天 16:00 之前第一次完全备份发生时看到备份作业启动并运行,但是,我有一个没有完整备份的差异备份?这怎么可能?
我已经安装了 SQL Server 2016 Enterprise 并应用了许可证密钥,但是
SERVERPROPERTY('LicenseType') is disbaled and
SERVERPROPERTY('NumLicenses') is null
Run Code Online (Sandbox Code Playgroud)
对于 SQL Server 2016,注册表中没有如下键:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL13.SQL2016\Setup
知道如何更改 SQL Server 的 LicenseType 吗?
我们正在研究 SSIS Lookup 和 T-SQL Join 之间的性能差异。我们要连接两个表;表位于同一个 SQL 服务器实例中,不同的数据库中。
我怀疑对于小表连接,差异很小或可以忽略不计。在这种情况下,我们的团队更喜欢 T-SQL,它比编写图表更容易编码/脚本。此外,在 DevOps 角度,我们可以在 DB 项目中编译/构建脚本;不幸的是,SSIS 不会正确编译 T-SQL,我可以在 SSIS 执行 SQL 语句中编写“testabcd”,并且该项目仍将构建/编译。
但是,对于需要更长时间处理的大量行,什么更快?具有索引和统计信息的 T-SQL 或全部在内存中进行的 SSIS?
我以不同的观点阅读了这些文章,团队正在努力达成共识。
https://derekdb.wordpress.com/2012/03/13/ssis-lookup-or-t-sql-join/ http://www.sqlservercentral.com/blogs/jamesserra/2011/08/29/when- to-use-t_2D00_sql-or-ssis-for-etl/
让我们假设,T-SQL 引擎和 SSIS 提供相同的硬件:CPU 和内存。鉴于相同的规格,我想从内部算法的角度了解性能速度。
performance sql-server ssis sql-server-2016 performance-tuning
我如何通过更改以下脚本来在启用/未启用 Always ON 的环境中运行。在 Kin 提供了一些非常有用的建议之后,下面似乎正在起作用。但是,当我需要跨 300-400 个 SQL 服务器进行部署时,此代码肯定不会处于最佳状态,而有些总是在其他服务器上没有。
请帮我修改/检查实例是否启用了AG并成功执行
更新根据@Kin 的要求
SET NOCOUNT ON
DECLARE @user_to_be_added sysname
SET @user_to_be_added = 'Domain\user'
DECLARE @sqltext nvarchar(max) = N''
if (select serverproperty('IsHadrEnabled')) = 0
BEGIN
-- change to your user to be added .. make sure that the login is already existing
SELECT @sqltext += char(10)+ 'use '+quotename(name)+';'+char(10)+ 'CREATE USER '+quotename(@user_to_be_added)+' FOR LOGIN '+quotename(@user_to_be_added)
FROM sys.databases where state_desc ='ONLINE' AND databaseproperty(name,'isReadOnly') = 0
SELECT @sqltext
END
Else
BEGIN
SELECT @sqltext …Run Code Online (Sandbox Code Playgroud) sql-server availability-groups sql-server-2014 sql-server-2016
我有一个“yyyymmdd”格式的日期字段,我需要使用该字段按年份过滤查询。
例如,在我的表中有一个“发布日期”字段,格式为“20180401”,我需要将查询过滤为仅包含 2018 年的记录。
作为某些增强功能的一部分,750 多个表中添加了一个新列。现在我的问题是在将近 3000 多个存储过程中,一些旧的 INSERT 没有命名列。
有什么办法可以得到所有没有列名插入的存储过程的“列表”?
我试过了:
SELECT OBJECT_NAME(object_id)
FROM sys.sql_modules
WHERE definition LIKE '%insert into%'
AND definition NOT LIKE '%) value%'
AND definition NOT LIKE '%)%' + CHAR(10) + '%value%'
AND definition NOT LIKE '%)%' + CHAR(13) + '%value%'
AND definition LIKE '%value%'
Run Code Online (Sandbox Code Playgroud)
但它仍然错过了很多。
PS - 上面的查询也返回 Insert Into (ColumnNames) SELECT 场景,这是我不想要的。
sql-server-2016 ×10
sql-server ×9
backup ×1
cast ×1
date ×1
performance ×1
ssdt ×1
ssis ×1
ssms ×1
t-sql ×1