3

次のSQLは、必要なものを取得します。

 SELECT TOP (50) [nodeId] 
 FROM [dbo].[cmsContentXml] 
 WHERE [xml] like '%creatorID="29"%'    
   AND [xml] like '%nodeType="1086"%' 
 ORDER BY [nodeId] DESC

数値をパラメーターとして渡す必要があるので、次のようにします。

exec sp_executesql N'SELECT TOP (@max) [nodeId] FROM [dbo].[cmsContentXml] WHERE [xml] like ''%creatorID="@creatorID"%''    AND [xml] like ''%nodeType="@nodeType"%'' ORDER BY [nodeId] DESC',N'@max int,@creatorID int,@nodeType int',@max=50,@creatorID=29,@nodeType=1086

しかし、これはレコードを返しません、何か考えはありますか?

4

2 に答える 2

1

SQLステートメントを修正して、ステートメントの一部としてパラメーターを送信するときにパラメーターを追加してステートメントを作成するようにしてください。

'SELECT TOP ' + @max + ' [nodeId] '.....
于 2010-05-26T10:23:45.310 に答える
0

問題は、LIKE句のパラメータを使用しようとしている方法が原因です。

つまり、@ creatorIDと@nodeTypeの値は、実際にはLIKE条件で使用されていません。実際にはxmlを検索しています。ここで、(たとえば)文字通り「%creatorID ="@creatorID"」のようになります。

クエリが次のように表示されないようにする必要があります。

SELECT TOP (@max) [nodeId] 
FROM [dbo].[cmsContentXml] 
WHERE [xml] like '%creatorID="@creatorID"%'
    AND [xml] like '%nodeType="@nodeType"%' 
ORDER BY [nodeId] DESC

代わりに:

SELECT TOP (@max) [nodeId] 
FROM [dbo].[cmsContentXml] 
WHERE [xml] like '%creatorID="' + CAST(@creatorID AS VARCHAR(50)) + '"%'
    AND [xml] like '%nodeType="' + CAST(@nodeType AS VARCHAR(50)) + '"%' 
ORDER BY [nodeId] DESC

だから次のようなもの:

DECLARE @SQL NVARCHAR(1000)
SET @SQL = '
    SELECT TOP (@max) [nodeId] 
    FROM [dbo].[cmsContentXml] 
    WHERE [xml] like ''%creatorID="'' + CAST(@creatorID AS VARCHAR(50)) + ''"%''    
       AND [xml] like ''%nodeType="'' + CAST(@nodeType AS VARCHAR(50)) + ''"%'' 
    ORDER BY [nodeId] DESC'

exec sp_executesql @SQL,
    N'@max int,@creatorID int,@nodeType int',
    @max=50,@creatorID=29,@nodeType=1086
于 2010-05-26T10:39:05.587 に答える