我们公司运行MS Access前端和SQL后端,我正在尝试为前端提供一个存储过程,使其能够访问T-SQL的IF EXIST,而不是使用DCount来提高性能。为此,我需要能够将SELECT语句传递给存储过程,到目前为止,我有以下代码:
CREATE PROCEDURE [dbo].IfExists
@selectStatement varchar(MAX)
AS
BEGIN
SET NOCOUNT ON;
IF EXISTS (@selectStatement)
RETURN 1
ELSE
RETURN 0
END
GO
不起作用,因为它不喜欢@selectStatement而不是硬编码语句。我不确定如何做到这一点,任何帮助都将不胜感激。
答案 0 :(得分:4)
您需要使用动态SQL来实现此目的
http://www.mssqltips.com/sqlservertip/1160/execute-dynamic-sql-commands-in-sql-server/
e.g:
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