2017-07-18 1 views
-3

次の選択の結果を変数に保存したいとします。T-SQL:SELECTの動的変数に関する問題

SET @SearchSchema = '(SELECT REPLACE(name,''Change Log Setup'', ''Change Log Entry'') as Name FROM ['[email protected]+'].sys.tables where name LIKE ''%$Change Log Setup'')' 

私はexec sp_executesqlでも試しました。ここで

は、全体のコードです:

DECLARE @DBName VARCHAR(5000); 
DECLARE @period VARCHAR(5000); 
DECLARE @SQLEXE VARCHAR(8000); 
DECLARE @SearchSchema NVARCHAR(4000); 
DECLARE @Authentification VARCHAR(1000); 
DECLARE @Path VARCHAR(1000); 
DECLARE @ServerName VARCHAR(1000); 

SET @period = '''2017-01-01 00:00:00'' AND ''2017-12-31 23:59:59''';  
SET @Path = 'C:\Users\Public\Documents\';         
SET @Servername = '-S nav-ey-demo2\NAVDEMO'; 

SET @DBName = (SELECT name FROM master.dbo.sysdatabases where name LIKE '%NAV%'); 
EXECUTE ('USE [' + @DBName+']'); Select db_name(); 

SET @SearchSchema = '(SELECT REPLACE(name,''Change Log Setup'', ''Change Log Entry'') as Name FROM ['[email protected]+'].sys.tables where name LIKE ''%$Change Log Setup'')' 

私は

SELECT @SearchSchema 

を使用している場合は、正しい値が表示されます。

PRINT '@SEARCHSCHEMA ' + @SearchSchema 

SELECT文字列を使用することにより

が表示されます。

SEARCHSCHEMA (SELECT REPLACE(name,'Change Log Setup', 'Change Log Entry') as Name FROM [Demo Database NAV (10-0)].sys.tables where name LIKE '%$Change Log Setup') 
+1

あなたの実際の問題点は明確ではありません。 – Kostis

+0

私はSELECTの結果を変数に保存します。 – WIbadeneralp

答えて

2

まずあなたが、あなたはそれがsp_executesqlを呼び出して実行して、変数に結果を格納し、あなたの動的なクエリを作成する必要があります。

DECLARE @DBName VARCHAR(5000); 
DECLARE @period VARCHAR(5000); 
DECLARE @SQLEXE VARCHAR(8000); 
DECLARE @SearchSchema NVARCHAR(4000); 
DECLARE @Authentification VARCHAR(1000); 
DECLARE @Path VARCHAR(1000); 
DECLARE @ServerName VARCHAR(1000); 
DECLARE @QueryResult NVARCHAR(4000); 

SET @period = '''2017-01-01 00:00:00'' AND ''2017-12-31 23:59:59'''; --DON'T change the audit period. It is only allowed by the EY auditor. A change of this value can be easily detected. 
SET @Path = 'C:\Users\Public\Documents\';         --you can change the path directory 
SET @Servername = '-S nav-ey-demo2\NAVDEMO'; 

SET @DBName = (SELECT name FROM master.dbo.sysdatabases where name LIKE '%NAV%'); 
EXECUTE ('USE [' + @DBName+']'); Select db_name(); 

SET @SearchSchema = '(SELECT @ResultOut = REPLACE(name,''Change Log Setup'', ''Change Log Entry'') as Name FROM ['[email protected]+'].sys.tables where name LIKE ''%$Change Log Setup'')' 

EXEC sp_executesql @SearchSchema, '@ResultOut NVARCHAR(4000) OUTPUT', @[email protected] OUTPUT; 

SELECT @QueryResult; 
+0

オブジェクト名に変数を使用するには動的SQLが必要なので、これはうまくいかないと思います。 –

+0

@TabAllemanあなたは正しいです..私はFROM ['+ @ DBName +']部分を逃しました...私は私の答えを更新しました。 – Kostis

+0

不都合なことに...動作しません.... メッセージ214、レベル16、状態2、プロシージャsp_executesql、行1 [バッチ開始行0] プロシージャは、 'ntext/nchar/nvarchar型のパラメータ' @statement ' ' – WIbadeneralp

関連する問題