2016-12-12 5 views
0

パラメータ名を含むテーブルにSQLクエリが格納されています。ストアドプロシージャで正しく実行する方法を知る必要があります。パラメータ付き動的SQL

これは、手順に

PROCEDURE [spMassUpdateSKUs] 
@SKU AS NVARCHAR(20) 
,@FIELD AS NVARCHAR(50) 
,@VALUE AS NVARCHAR(50) 
,@RESULT as Int = Null Output 
AS 
BEGIN 
IF EXISTS(SELECT CODENUMBER FROM INVENTORY_MASTER WHERE [email protected]) 
    BEGIN 
    DECLARE @SQLQUERY AS NVARCHAR(50) 
    SET @SQLQUERY=(SELECT SQLUPDATE FROM MASS_UPDATE WHERE [email protected]) 
    EXEC SP_EXECUTESQL @SQLQUERY 
    END 

私のSQLコードであり、これは私が本当のパラメータが、そのdoen't仕事に置き換えてみたテーブルからSQLクエリ

update inventory_master_flex set [email protected] where [email protected] 

です。

SELECT REPLACE(REPLACE(@SQLQUERY,'@VALUE',@VALUE),'@SKU',@SKU) 
+0

この 'SELECT REPLACE(置換@(@ VALUE '、@ VALUE)、' @ SKU '、@ SKU)を実行すると、更新クエリはどのように見えますか?それは正しいかどうか?それはうまくいかないという意味ですか? ** departmentidとcodenumberが文字列の場合、一重引用符を使用する必要があります。** –

+0

大文字と小文字の区別が異なります。既定では、SQL Serverは大文字と小文字を区別しませんが、テーブル、データベース、またはサーバーの構成が異なる場合があります。 –

+0

あなたの値はあなたの現在の 'REPLACE'コードで引用されません。 [sp_executesql](https://technet.microsoft.com/en-us/library/ms175170.aspx)を使用して、パラメータを適切に渡す必要があります。 – Blorgbeard

答えて

1
-- 50 is too short for sure; you may try 1000 or different number 
DECLARE @SQLQUERY AS NVARCHAR(MAX) 

-- for debug purpose 
PRINT @SQLQUERY 

-- params 
EXEC SP_EXECUTESQL @SQLQUERY, N'@Value NVARCHAR(50), @sku NVARCHAR(50)`, @Value, @sku 

@sqlqueryコードが引用符で囲まれた文字列の場合、REPLACEは正しくありません。

1

replace()sp_executesqlを使用してパラメータを渡していない:

IF EXISTS(SELECT CODENUMBER FROM INVENTORY_MASTER WHERE [email protected]) 
    BEGIN 
     DECLARE @SQLQUERY AS NVARCHAR(MAX); 

     SET @SQLQUERY = (SELECT SQLUPDATE FROM MASS_UPDATE WHERE DROPDOWNLABEL = @FIELD); 

     EXEC SP_EXECUTESQL @SQLQUERY, N'@SKU VARCHAR(255), @VALUE VARCHAR(255)', @SKU = @SKU, @VALUE = @VALUE 
    END; 

私は種類が何であるかを知りません。しかし、一方または両方が文字列または日付の場合、実装では単一引用符が必要です。しかし、すでにsp_executesqlを使用しているので、全体的に行き、パラメータを渡してください。

関連する問題