2016-12-30 1 views
0

Meine Prozedur gibt nichts zurück, wenn where-Klauselbedingung als Parameter übergeben wird. Unten ist die Beispielabfrage und ich übergebe @strWhereClauseField & @strWhereClauseValue als Parameter. Es funktioniert gut, wenn ich meine Abfrage in Zeichenfolge konvertiere und es ausführe. Aber ich möchte keine Abfragezeichenfolge verwenden, da "Reihenfolge nach" in der Abfragezeichenfolge nicht funktioniert.Prozedur, die Nullzeilen zurückgibt, wenn where-Klausel als Parameter übergeben wird

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 

Antwort

0

Try dies:

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

schätzen Sie Ihre Antwort, aber ich kann Abfrage Zeichenfolge nicht verwenden, da Reihenfolge von funktioniert nicht in Abfragezeichenfolge und meine ursprüngliche Abfrage wird aufgrund seiner Länge abgeschnitten. – user1891251

+0

@ user1891251 'ORDER BY' funktioniert einwandfrei, wenn Sie es in die Zeichenfolge einschließen. Und genau wie lang ist Ihre Abfrage, dass es nicht in 'varchar (max)' passt? –

+0

Die Länge ist 5000, kann aber basierend auf den Parametern variieren. – user1891251

0

Leider, was Sie tun werden in SSMS nicht (SQL Server Management Studio) als SSMS die Abfrage sieht wie so:

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

Versuchen Sie Folgendes:

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

Nur 'EXEC (@sql)' Sie haben auch ein Problem, dass der Bereich, in dem 'EXEC (@sql)' ausgeführt wird, keinen Zugriff auf die Tabellenvariable hat. Sie müssen eine "zugänglichere" Tabelle oder Wrapptabellen-Deklaration verwenden und in '@ sql' laden. Schließlich funktioniert' @WhereClauseField == '@ Data.Product'' nicht. Entweder das Tabellenpräfix löschen oder einen Alias ​​verwenden. –

Verwandte Themen