[英]SQL Pass a string to a Stored Procedure that is not a Column Name
我可以将字符串传递给不是列名的存储过程吗?
我需要从C#调用StoredProcedure。
以下不起作用,因为没有它的Type就无法定义参数,但显示了我想要做的事情。 问题是Sql将@stringToIdentifyDataTable看作ColumnName,这看起来很公平,但不是我想要做的。
Alter PROCEDURE [dbo].[PutNewTypeSource] @stringToIdentifyDataTable,
@ID int, @Description varchar(50), @Active bit
AS
DECLARE
@Query AS VARCHAR(MAX),
@Field_Out AS VARCHAR(MAX)
SELECT @Field_Out = CASE @stringToIdentifyDataTable
WHEN 'ReferralSource' THEN '[Adm].[JobReferralSource]'
WHEN 'ReferralSource2' THEN '[Adm].[JobReferralSource2]'
END
SET @Query = concat('
IF EXISTS (SELECT ID FROM ',@Field_Out,' WHERE Description= ',@Description,')
BEGIN
UPDATE ',@Field_Out,
'SET Active = ',@Active,
'WHERE Description= ',@Description,';
END')
EXEC (@Query)
exec [PutNewTypeSource] 'ReferralSource', 1, 'Description1', 0
如果我理解你能做什么就是这个。 请注意,我正确引用了您的对象,并且重要的是参数化参数。 您之前所拥有的是对注射的广泛开放:
ALTER PROCEDURE [dbo].[PutNewTypeSource] @Referral varchar(50), @Description varchar(50), @Active bit --I remvoed @ID as it was never used
AS BEGIN
DECLARE @Schema sysname,
@Table sysname;
SET @Schema = CASE WHEN @Referral IN ('ReferralSource','ReferralSource2') THEN N'adm' END;
SET @Table = CASE @Referral WHEN 'ReferralSource' THEN N'JobReferralSource'
WHEN 'ReferralSource2' THEN N'JobReferralSource2' END;
DECLARE @SQL nvarchar(MAX);
SET @SQL = N'UPDATE ' + QUOTENAME(@Schema) + N'.' + QUOTENAME(@Table) + NCHAR(13) + NCHAR(10) +
N'SET Active = @Active' + NCHAR(13) + NCHAR(10) +
N'WHERE Description= @Description;';
EXEC sp_executesql @SQL, N'@Description varchar(50), @Active bit', @Description = @Description, @Active = @Active;
END;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.