3

当社はMSAccessフロントエンドとSQLバックエンドを実行しており、パフォーマンスを向上させるためにDCountを使用する代わりに、フロントエンドがT-SQLのIFEXISTにアクセスできるようにするストアドプロシージャを提供しようとしています。これを行うには、SELECTステートメントをストアドプロシージャに渡すことができる必要があります。これまでのところ、次のコードがあります。

CREATE PROCEDURE [dbo].IfExists 
@selectStatement varchar(MAX)
AS
BEGIN
SET NOCOUNT ON;
IF EXISTS (@selectStatement)
    RETURN 1
ELSE
    RETURN 0
END
GO

ハードコードされたステートメントの代わりに@selectStatementが気に入らないため、これは機能しません。どうすればこれができるかわからないので、助けていただければ幸いです。

4

1 に答える 1

4

これを実現するには、動的SQLを使用する必要があります

http://www.mssqltips.com/sqlservertip/1160/execute-dynamic-sql-commands-in-sql-server/

例えば:

DECLARE @DynamicSQl NVARCHAR(MAX), @retVal INT

SET @DynamicSQl = 'select @retVal = 1 from (' + @selectCommand + ') t'

EXEC sp_executesql @DynamicSQl, N'@retVal INT OUTPUT', @retVal output

IF (@retVal = 1)
  RETURN 1
ELSE
  RETURN 0
于 2012-12-28T18:15:36.670 に答える