<commit_before>---
layout: post
title: SQL Server 使用 OpenQuery 以及傳遞參數
date: 2014-03-15 11:30
author: Poy
comments: true
categories: [Develop, SQL]
---
在SQL Server 中建立好與 Oracle 連接後，可透過下列方式查詢 Oracle DB Server 的資料

```sql
SELECT * FROM OpenQuery([linkedServerName],'SELECT * FROM dual')
//ex: SELECT * FROM OpenQuery(PROD,'SELECT * FROM dual')
```

但如果你要傳的 SQL 帶有字串時，如下語法

```sql
SELECT * FROM dual WHERE EmplID='12258'
```

則需要透過「轉義字符(')」來控制，因此SQL修改成如下的方式傳值

```sql
SELECT * FROM OpenQuery(PROD,'SELECT * FROM dual WHERE EmplID=''12258''')
```

如果今天你要在傳的 SQL 中再加上參數了話，就會變得複雜了，請參考下列 SQL 來處理

```sql
DECLARE @SQL VARCHAR(1000)
DECLARE @OrgID VARCHAR(10)
SELECT @OrgID = 'SPK1'
SET @SQL = 'SELECT * FROM dual WHERE OrgID ='+@OrgID
SET @SQL = 'SELECT * FROM OpenQuery(PROD, ''' + REPLACE(@SQL, '''', '''''') + ''')'
EXEC(@SQL)
```

透過 REPLACE 函數，將 SQL 字串中的轉義字符調整成所需的樣式
<commit_msg>alter post<commit_after>---
layout: post
title: SQL Server 使用 OpenQuery 以及傳遞參數
date: 2014-03-15 11:30
author: Poy
comments: true
categories: [Develop, SQL]
---
在SQL Server 中建立好與 Oracle 的 DBLink 連接後，可透過下列方式查詢 Oracle DB Server 的資料

```sql
SELECT * FROM OpenQuery([linkedServerName],'SELECT * FROM dual')
//ex: SELECT * FROM OpenQuery(PROD,'SELECT * FROM dual')
```

但如果你要傳的 SQL 帶有字串時，如下語法

```sql
SELECT * FROM dual WHERE EmplID='12258'
```

則需要透過「轉義字符(')」來控制，因此SQL修改成如下的方式傳值

```sql
SELECT * FROM OpenQuery(PROD,'SELECT * FROM dual WHERE EmplID=''12258''')
```

如果今天你要在傳的 SQL 中再加上參數了話，就會變得複雜了，請參考下列 SQL 來處理

```sql
DECLARE @SQL VARCHAR(1000)
DECLARE @OrgID VARCHAR(10)
SELECT @OrgID = 'SPK1'
SET @SQL = 'SELECT * FROM dual WHERE OrgID ='+@OrgID
SET @SQL = 'SELECT * FROM OpenQuery(PROD, ''' + REPLACE(@SQL, '''', '''''') + ''')'
EXEC(@SQL)
```

透過 REPLACE 函數，將 SQL 字串中的轉義字符調整成所需的樣式

{'fraction_non_alphanumeric': 0.16287015945330297, 'fraction_numerical': 0.03302961275626424, 'mean_word_length': 5.459558823529412, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5551901', 'n_tokens_mistral': 896, 'n_tokens_neox': 890, 'n_words': 189}