SqlServer存储过程实现及拼接sql的注意点_MsSql

这里我昨天碰到的问题就是执行一段根据变量tableName对不同的表进行字段状态的更改。由于服务器原因,我不能直接在数据访问层写SQL,所以只好抽离出来放到存储过程里面。

这里就出现了一个问题,我花费了好久才弄通!

  其实就是很简单的一个SQL语句:

  update table1 set field1=value1,field2 = value2 where id = id

  我写成什么样子了呢?大家且看: 

declare @tableName nvarchar(50),
      @field1 int,
      @field2 nvarchar,
      @id int
  declare @sql nvarchar(max)
  set @sql = 'update '+@tableName+' set field1= '+@field1+',field2= '+@field2+' where id='+@id
  exec @sql 

  有过这方面经验的同学肯定知道这样写明显是错的,sql会报异常,说无法讲nvarchar转换成int类型

  那么这个错误是具体是值什么呢?其实就是说,在拼接sql的时候,这个@sql要是一个字符串类型,所有的变量也都必须用字符串表示,我上面的@field1和@id是int,所以要转化成nvarchar类型,并且是nvarchar类型的变量(字段)必须用单引号括起来;注:在sql中单引号是用两个单引号表示的

  所以经过修改,正确的拼接sql代码是:

set @sql='update '+@tableName+ ' set field1='+cast(@field1 as varchar)+',field2='''+@field2+''' where id='+CAST(@id as varchar) 

  这个问题其实非常简单,但是由于我在SQL方面的知识很是不足,所以在这里记录来巩固自己。

以上所述是小编给大家介绍的SqlServer存储过程实现及拼接sql的注意点,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索sqlserver存储过程
拼接sql
mssql 字符串拼接、mssql 拼接、mssql 字符串拼接函数、mssql 字符拼接、mssqlserver,以便于您获取更多的相关知识。

时间: 2024-11-05 19:33:40

SqlServer存储过程实现及拼接sql的注意点_MsSql的相关文章

SqlServer存储过程实现及拼接sql的注意点

这里我昨天碰到的问题就是执行一段根据变量tableName对不同的表进行字段状态的更改.由于服务器原因,我不能直接在数据访问层写SQL,所以只好抽离出来放到存储过程里面. 这里就出现了一个问题,我花费了好久才弄通! 其实就是很简单的一个SQL语句: update table1 set field1=value1,field2 = value2 where id = id 我写成什么样子了呢?大家且看: declare @tableName nvarchar(50), @field1 int, @

CPQuery 解决拼接SQL的新方法_MsSql

我一直都不喜欢在访问数据库时采用拼接SQL的方法,原因有以下几点: 1. 不安全:有被SQL注入的风险. 2. 可能会影响性能:每条SQL语句都需要数据库引擎执行[语句分析]之类的开销. 3. 影响代码的可维护性:SQL语句与C#混在一起,想修改SQL就得重新编译程序,而且二种代码混在一起,可读性也不好. 所以我通常会选择[参数化SQL]的方法去实现数据库的访问过程,而且会将SQL语句与项目代码(C#)分离开. 不过,有些人可能会说:我的业务逻辑很复杂,Where中的过虑条件不可能事先确定,因此

sqlserver 存储过程带事务 拼接id 返回值_MsSql

删除一条留言信息会级联删除回复信息,这时我们需要用到事务,如下SQL 复制代码 代码如下: ALTER PROCEDURE [dbo].[proc_tb_leaveword_delete] (      @leavewordID INT,     @record TINYINT OUTPUT )     AS BEGIN     BEGIN TRY         BEGIN TRANSACTION             DELETE FROM tb_leavewordID WHERE lea

sqlserver 存储过程带事务 拼接id 返回值

删除一条留言信息会级联删除回复信息,这时我们需要用到事务,如下SQL 复制代码 代码如下: ALTER PROCEDURE [dbo].[proc_tb_leaveword_delete]  (      @leavewordID INT,      @record TINYINT OUTPUT  )     AS  BEGIN      BEGIN TRY          BEGIN TRANSACTION              DELETE FROM tb_leavewordID WH

sqlserver 存储过程- 新手请求帮助SQL触发器

问题描述 新手请求帮助SQL触发器 set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER TRIGGER [tr_yskq1] ON [dbo].[yskq1] FOR INSERT AS declare @bh varchar(10), @date1 datetime, @time1 varchar(30), @timeA varchar(30), @timeB varchar(30), @bmmc varchar(50), @jh bigin

mssql-存储过程不让拼接SQL语句

问题描述 存储过程不让拼接SQL语句 公司DBA不允许创建的存储过程中有拼接SQL语句的行为,请问,该怎么解决?说是这样做有风险,说我非要用的话,可以签一份风险协议,出了问题我负责之类的.请问:各位在多条件查询这种情况下,存储过程都是怎么写的?有不拼接又省事的办法吗?另外,这个风险难道微软没有提供解决方案吗? 解决方案 真正的风险, 不在于拼SQL, 而是输入值没有参数化. 比如: delare @sql nvarchar(max), @name nvarchar(20) set @name='

存储过程中拼接SQL语句

很多时候我们需要利用参数在存储过程中重新组织SQL语句,在存储过程中拼接的SQL语句只是一个字符串,不会被直接执行,所以加一个execute执行它就可以了.具体看如下演示代码: 代码: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go -- ============================================= -- Author:  yy -- Create date: 2012-1-17 -- Description: 存储过程S

调试本地SQLServer存储过程

server|sqlserver|存储过程 Author:zfive5(zhaozidong)email :zfive5@yahoo.com.cn     最近工作原因写起了存储过程,编码时难免调试,但sqlserver调试方面的傻瓜程度简直不能于oracle相提并论,记着先前做oracle项目时,只要装好PL/SQL Developer后,一切都那么简单,而现在sqlserver要能调试还的需要配置才能ok!     下面就是我的实践: 一.如果调试数据在本机上,那一切都很简单! msdn中是

SQLServer存储过程访问数据库权限异常问题的解决方案

server|sqlserver|存储过程|访问|解决|数据|数据库|问题 最近用ASP.net 2.0 + SQL Server做一个网页表单的提交,使用C#编写存储过程来完成向SQL Server数据库表中插入记录的操作.在调用这个存储过程时,出现了关于存储权限的一个异常.下面详述异常产生的过程和解决方案. 1.操作步骤:1)使用ASP.net 2.0,用C#写了一个存储过程,对数据库test中的一个表进行操作,代码如下: public class StoredProcedures{[Mic