2016-12-30 13 views
0

where句の条件をパラメータとして渡すときに何も返さないプロシージャ。以下はサンプルクエリです。パラメータとして@strWhereClauseField & @strWhereClauseValueを渡しています。クエリを文字列に変換して実行するとうまく動作します。しかし、order byはクエリ文字列内で動作していないため、クエリ文字列を使用したくありません。where句をパラメータとして渡すときにゼロ行を返すプロシージャ

DECLARE @Data TABLE 
(
    Id int identity(1,1), Product varchar(10) 
) 

INSERT @Data VALUES ('HP2030'), ('HP2031'), ('HP2032'), ('HP2033'); 

DECLARE @strWhereClauseField NVARCHAR(1000) = '1' 
DECLARE @strWhereClauseValue NVARCHAR(1000) = '1' 

SET @strWhereClauseField = '@Data.Product' 
SET @strWhereClauseValue = '''HP2030''' 

SELECT * 
FROM @Data 
WHERE @strWhereClauseField = @strWhereClauseValue 

答えて

0

てみてくださいこれは:

DECLARE @strWhereClauseField NVARCHAR(1000) = '1' 
DECLARE  @strWhereClauseValue NVARCHAR(1000) = '1' 
DECLARE @QUERY VARCHAR(MAX) 

SET @strWhereClauseField='Product' 
SET @strWhereClauseValue='''HP2030''' 

SET @QUERY = 'DECLARE @Data TABLE 
(
Id int identity(1,1) 
,Product varchar(10) 
) 
INSERT @Data VALUES 
(''HP2030''); 
INSERT @Data VALUES 
(''HP2031''); 
INSERT @Data VALUES 
(''HP2032''); 
INSERT @Data VALUES 
(''HP2033''); 
SELECT * FROM @Data WHERE '[email protected]+'='[email protected]+'' 
EXEC (@QUERY) 
+0

あなたの答えを感謝しますが、私はクエリ文字列で動作していないため、私の元のクエリはその長さのために切り捨てられているので、私はクエリ文字列を使用することはできません。 – user1891251

+0

@ user1891251 'ORDER BY'は文字列に含めると完全に正常に動作します。そして、正確にあなたのクエリは 'varchar(max)'に収まらないのですか? –

+0

長さは5000ですが、パラメータに基づいて変化する可能性があります – user1891251

0

は、残念ながら、あなたは何をしているかSSMSがなるようにクエリを見ているようSSMSに(SQL Server Management Studioを)動作しません。

SELECT * FROM @Data WHERE '@Data.Product' = '''HP2030''' 

次のことを試してみてください。

DECLARE @Data TABLE 
(
    Id int identity(1,1), Product varchar(10) 
) 

INSERT @Data VALUES ('HP2030'), ('HP2031'), ('HP2032'), ('HP2033'); 

DECLARE @strWhereClauseField NVARCHAR(1000) = '@Data.Product' 
DECLARE @strWhereClauseValue NVARCHAR(1000) = '''HP2030''' 
DECLARE @strOrderByColumn NVARCHAR(1000) = 'Product' 


DECLARE @sql VARCHAR(MAX) = 'SELECT * FROM @Data WHERE ' + @strWhereClauseField + '=' + @strWhereClauseValue + ' ORDER BY ' + @strOrderByColumn 

EXEC sp_executesql(@sql) 
+0

'EXEC(@sql)' 'EXEC(@sql)'の実行範囲にテーブル変数へのアクセス権がないという問題もあります。よりアクセス可能なテーブルまたはラップテーブル宣言を使用して '@ sql'にロードする必要があります。最後に' @WhereClauseField == '@ Data.Product''は機能しません。テーブル接頭辞を削除するか、エイリアスを使用してください。 –

関連する問題