C# 字符串中的动态t-sql引号
我在存储过程中具有以下内容:C# 字符串中的动态t-sql引号,c#,sql,sql-server-2005,tsql,C#,Sql,Sql Server 2005,Tsql,我在存储过程中具有以下内容: DECLARE @new_column_name varchar(9) DECLARE @table_name varchar(16) DECLARE @SQLString nvarchar(2000) SET @new_column_name = N'name' SET @table_name = N'tbl_test_table' SET @SQLString = N'SELECT @CountOUT = COUNT(*) FROM [' + @table_
DECLARE @new_column_name varchar(9)
DECLARE @table_name varchar(16)
DECLARE @SQLString nvarchar(2000)
SET @new_column_name = N'name'
SET @table_name = N'tbl_test_table'
SET @SQLString = N'SELECT @CountOUT = COUNT(*) FROM [' + @table_name + '] WHERE [' + @new_column_name + '] = ''' + @description + ''''``
在@description中只有一个引号之前,这是绝对有效的。在我的C#中,我将单引号替换为两个单引号,但在创建上述SQL字符串时,这仍然会导致问题
如何解决此问题的任何想法:
SET @description = N'Adam''s Car'
我之所以使用动态SQL,是因为“name”列是临时的,只在存储过程的生命周期内存在。NB:请参阅
您仍然应该使用参数化sql并使用exec sp_executesql
(它接受参数)。在对象名称周围使用QUOTENAME
,而不是自己连接括号
SET @SQLString = N'SELECT @CountOUT = COUNT(*) FROM ' +
QUOTENAME(@table_name) + ' WHERE ' +
QUOTENAME(@new_column_name) + ' = @description'
EXECUTE sp_executesql @SQLString
,N'@description varchar(50), @CountOUT int OUTPUT'
,@description = @description
,@CountOUT = @CountOUT OUTPUT;
注:见
您仍然应该使用参数化sql并使用exec sp_executesql
(它接受参数)。在对象名称周围使用QUOTENAME
,而不是自己连接括号
SET @SQLString = N'SELECT @CountOUT = COUNT(*) FROM ' +
QUOTENAME(@table_name) + ' WHERE ' +
QUOTENAME(@new_column_name) + ' = @description'
EXECUTE sp_executesql @SQLString
,N'@description varchar(50), @CountOUT int OUTPUT'
,@description = @description
,@CountOUT = @CountOUT OUTPUT;
在C#ADO.NET代码中使用参数…不幸的是,我没有用!在C#ADO.NET代码中使用参数…不幸的是,我没有用!