[SQL] Coalesce 與 Isnull 差異與用法(https://dotblogs.com.tw/SteveLiu/2019/05/21/174116)
取得 Execute SQL 裡面資料的值
原文: https://rainmakerho.github.io/2017/10/03/20171003-2/
(1) Store Procedue ,透過 sp_executesql + 它的 output 參數來取得資料DECLARE @sql NVARCHAR(max), @outputcode NVARCHAR(4000);
SET @sql =
'EXEC SP_GETSERNO @RETURNS=@outputcode output';
exec sp_executesql @sql, N'@outputcode NVARCHAR(4000) out', @outputcode out
SELECT @outputcode;
(2) 取得 t-sql 裡面的內容,需要先建立 temp table ,或是 TABLE 變數,然後在 Exec 的 t-sql 裡面使用DECLARE @ATT_IDENT TABLE (ATT_IDENT int);
INSERT @ATT_IDENT
exec ('SELECT top 1 ATT_IDENT FROM [dbo].[myTable]');
select * FROM @ATT_IDENT;
(3) t-sql,透過 sp_executesql + 它的 output 參數來取得資料,例如,DECLARE @IDT NUMERIC
exec sp_executesql N'SELECT TOP 1 @IDT = ATT_IDENT FROM [dbo].[myTable]', N'@IDT NUMERIC out', @IDT OUT
SELECT @IDT;
(4) 透過 OPENQUERY 的方式,詳細可以參考「讓 Execute 可以搭配 Select Into,而不再只有 Insert into」
SQL Server中DateTime与DateTime2的区别
DateTime字段类型对应的时间格式是 yyyy-MM-dd HH:mm:ss.fff ,3个f,精确到1毫秒(ms),示例 2014-12-03 17:06:15.433 。
DateTime2字段类型对应的时间格式是 yyyy-MM-dd HH:mm:ss.fffffff ,7个f,精确到0.1微秒(μs),示例 2014-12-03 17:23:19.2880929 。
如果用SQL的日期函数进行赋值,DateTime字段类型要用 GETDATE() ,DateTime2字段类型要用 SYSDATETIME() 。
MSDTC
如遇到CALL 遠端(LINK DB)的SP,收其產生的結果集,出現以下錯誤訊息
SAMPLE CODE:
IF OBJECT_ID (N'tempdb..#REL', N'U') IS NOT NULL
DROP TABLE #REL
create table #REL
(
COL1 varchar(50) NOT NULL
,COL2 varchar(50) NULL
)
insert into #REL
exec [1.2.3.4].XXDB.dbo.[SP_QryRM]
解法1:
【Windows】啟用 MSDTC 服務與相關設定https://dotblogs.com.tw/echo/2017/08/24/windows_msdtc_setting
需要開很多PORT,調系統設定及重開機,超麻煩的。
解法2:
設定LINK DB,啟用RPC的分散式交易促銷設為FALSE
解法3:
OPENROWSET,可是在SQL 2016可能會有問題?
IF OBJECT_ID('tempdb..#tmp') IS NOT NULL
DROP TABLE #tmp
GO
CREATE TABLE #tmp (
APPLY_HOUSE_SEQNO varchar(30),
APPNO varchar(30)
)
INSERT INTO #tmp
SELECT *
FROM OPENROWSET('SQLOLEDB','1.2.3.4,1433';'ID';'PWD','SET FMTONLY OFF; EXEC XXDB.dbo.SP_ONLINE_888')
select * from #tmp
linkDB的query_timeout & remote query timeout
在 MSSQL 預設的 timeout 時間是 600秒,如果在必要的狀況下必須修改 timeout 時間可以執行以下
USE master
GO
EXEC sp_configure 'remote query timeout', 6000
GO
RECONFIGURE
GO
6000 即為 timeout 秒數,用 RECONFIGURE 來生效。
設定 remote query timeout 伺服器組態選項
https://docs.microsoft.com/zh-tw/sql/database-engine/configure-windows/configure-the-remote-query-timeout-server-configuration-option?view=sql-server-2017
BCP IN遇到自動加一的TABLE
bcp TestDatabase.dbo.myIdentity IN D:\BCP\myIdentity.bcp -T -c -t, -E